views:

539

answers:

3

Hi,

I am looking for a reference implementation of IEEE-754 operations. Is there such a thing?

A: 

A rather confusing question; in C++ it is assumed this sort of detail is taken care of by the hardware or the compiler. So, in C++ floating-point addition would be

float a = 1.0;
float b = 2.0;
float c = a + b;

I'm sure this is not what you actually meant; perhaps you'd benefit from this page which tries to emulate IEEE-754-compliant hardware in javascript?

BlueRaja - Danny Pflughoeft
And no, looking at the compiler's source would not be helpful, since you'd be looking at the C code to generate the IEEE-754-compliant assembly-code, rather than C code that does IEEE-754 computations.
BlueRaja - Danny Pflughoeft
Old ARM chips (and probably some new ones) don't have an FPU, so looking at the source code for a compiler which targets ARM would be helpful, since it has to be capable of performing float and double arithmetic "in software". Of course the implementations will be ferociously optimised, and might use CPU ops that aren't entirely trivial in C.
Steve Jessop
+3  A: 

I believe the C libraries SoftFloat and fdlibm are suitable for what you are looking for. Others include Linux (GNU libc, glibc) or *BSD libc's math functions. Finally, CRlibm should also be of interest to you.

Ulrich Drepper has a interesting look at different math libraries, that might be also worth reading through.

mctylr
SoftFloat is from John R. Hauser who wrote an article about the use of IEEE exceptions in the article TOPLAS. I wasn't aware that Hauserdid write an own implementation, so it's likely that he in fact haswritten a reference implementation.
Thorsten S.
Thanks. SoftFloat is definitely what i was looking for. I will take a look at the others too.
zr
+1  A: 

I must disappoint you: There is practically none.

While technically there are IEEE-754 compliant systems because they do not implement non-required features described in the standard, a reference implementation allowing

  • access to all rounding modes
  • support signalling NaNs
  • support trapping of all five traps

does not exist in the standard languages. This causes recurring woes of William Kahan, the main force behind the standard and its adaption on the Intel processors.

I don't know if there are some esoteric languages which do support them, but I can rule out Java, C#, C++, Fortran.

EDIT: While there is a lack of compiler support, I advise Hausers SoftFloat implementation given by mctylr. Hauser knows what he is doing.

http://portal.acm.org/citation.cfm?id=227699.227701&coll=portal&dl=ACM&CFID=77938829&CFTOKEN=18578907

Thorsten S.