Sometimes it’s all too much…
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
