Sometimes it’s all too much…

code 23 June 2009 | 0 Comments

Argh

#include <stdio.h>
#include <math.h>
#include <fenv.h>
 
int main () {
	// don't set rounding here
	double ten0 = sin(pow(10.0,22));
 
	fesetround(FE_DOWNWARD);
	double ten1 = sin(pow(10.0,22));
 
	fesetround(FE_UPWARD);
	double ten2 = sin(pow(10.0,22));
 
	fesetround(FE_TONEAREST);
	double ten3 = sin(pow(10.0,22));
 
	fesetround(FE_TOWARDZERO);
	double ten4 = sin(pow(10.0,22));
 
	printf(
		"Default:    %f\n"
		"Downward:   %f\n"
		"Upward:     %f\n"
		"ToNearest:  %f\n"
		"TowardZero: %f\n",
		ten0, ten1,
		ten2, ten3, ten4);
 
	return 0;
}
$ gcc test.c -lm -fno-builtin && ./a.out
Default:    0.462613
Downward:   0.986580
Upward:     0.462613
ToNearest:  0.462613
TowardZero: 0.986580
~$ gcc test.c -lm  && ./a.out
Default:    -0.852201
Downward:   -0.852201
Upward:     -0.852201
ToNearest:  -0.852201
TowardZero: -0.852201

Tagged in , , , , ,

Leave a Reply