Note: Per comment from Marcus Müller below, GNURadio has not used 80-bit floating-point for some time, so the comment cited in the question is stale at best. So this answer only speaks to differences between 80-bit and 32-bit floating-point arithmetic in general and is not applicable to the current GNURadio implementation.
You have not shown source code, so the answer is speculative. Presumably, the reference implementation uses long double
, and long double
in the C++ implementation the author used is implemented with the 80-bit floating-point types built into Intel hardware. It would not look like 80-bit code in the sense of seeing any explicit extended-precision arithmetic; it would just look like C++ code with a long double
type.
Meanwhile, the primary implementation is implemented with SSE code. SSE is the name of an Intel instruction subset that includes SIMD (Single Instruction Multiple Data) instructions that work on four 32-bit floating-point numbers at a time. That code would be obvious on appearance; it would be in assembly using SSE instructions, in C++ using compiler built-ins referring to SSE instructions, or possibly in C++ using compiler extensions to support vector types.
Naturally, the floating-point rounding errors that occur when using 32-bit floating-point arithmetic differ from the floating-point rounding errors that occur when using 80-bit floating-point arithmetic, so one would not expect results computed by the two different methods to be equal. The author has designed the tests to tolerate some differences in results.
It should be noted that although the code is of course targeted for the Intel architecture, not all C++ implementations implement long double
with the 80-bit floating-point arithmetic. A C++ implementation might use 64-bit arithmetic. So, if you run the code using a C++ implementation different from the author’s, you may get different results. While 64-bit arithmetic generally has larger rounding errors than 80-bit arithmetic, it is likely that whatever tolerance the author set for differences between 32-bit and 80-bit arithmetic will also cover the differences between 32-bit and 64-bit arithmetic, so no adjustment may be needed.