#include #include #include double n[] = { 0.000005, 0.000015, 0.000025, 0.000035, 0.000045, 0.000055, 0.000065 }; char *str[] = { "0.000005", "0.000015", "0.000025", "0.000035", "0.000045", "0.000055", "0.000065" }; int main(int argc, char *argv[]) { int i, j; for (j = 0; j < 4; j++) { fesetround(j); printf("rounding: %d\n", j); double m = n[0]; for (i = 0; i < sizeof(n)/sizeof(*n); i++) { printf(" compiler: %40.30a => %40.30f\n", n[i], n[i]); printf(" atof: %40.30a => %40.30f\n", atof(str[i]), atof(str[i])); printf(" calc: %40.30a => %40.30f\n", m, m); m += 0.00001; } } return 0; } #### rounding: 0 compiler: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 atof: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 calc: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 compiler: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 atof: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 calc: 0x1.f75104d551d6a00000000000000000p-17 => 0.000015000000000000002074078756 compiler: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 atof: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 calc: 0x1.a36e2eb1c432e00000000000000000p-16 => 0.000025000000000000004586175190 compiler: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 atof: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 calc: 0x1.2599ed7c6fbd300000000000000000p-15 => 0.000035000000000000003710139834 compiler: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 atof: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 calc: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 compiler: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 atof: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 calc: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 compiler: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 atof: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 calc: 0x1.10a137f38c54400000000000000000p-14 => 0.000065000000000000007858297346 rounding: 1 compiler: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 atof: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 calc: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 compiler: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 atof: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 calc: 0x1.f75104d551d6a00000000000000000p-17 => 0.000015000000000000002074078756 compiler: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 atof: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 calc: 0x1.a36e2eb1c432e00000000000000000p-16 => 0.000025000000000000004586175190 compiler: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 atof: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 calc: 0x1.2599ed7c6fbd300000000000000000p-15 => 0.000035000000000000003710139834 compiler: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 atof: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 calc: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 compiler: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 atof: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 calc: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 compiler: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 atof: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 calc: 0x1.10a137f38c54400000000000000000p-14 => 0.000065000000000000007858297346 rounding: 2 compiler: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 atof: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 calc: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 compiler: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 atof: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 calc: 0x1.f75104d551d6a00000000000000000p-17 => 0.000015000000000000002074078756 compiler: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 atof: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 calc: 0x1.a36e2eb1c432e00000000000000000p-16 => 0.000025000000000000004586175190 compiler: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 atof: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 calc: 0x1.2599ed7c6fbd300000000000000000p-15 => 0.000035000000000000003710139834 compiler: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 atof: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 calc: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 compiler: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 atof: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 calc: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 compiler: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 atof: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 calc: 0x1.10a137f38c54400000000000000000p-14 => 0.000065000000000000007858297346 rounding: 3 compiler: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 atof: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 calc: 0x1.4f8b588e368f100000000000000000p-18 => 0.000005000000000000000409015270 compiler: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 atof: 0x1.f75104d551d6900000000000000000p-17 => 0.000015000000000000000380012861 calc: 0x1.f75104d551d6a00000000000000000p-17 => 0.000015000000000000002074078756 compiler: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 atof: 0x1.a36e2eb1c432d00000000000000000p-16 => 0.000025000000000000001198043401 calc: 0x1.a36e2eb1c432e00000000000000000p-16 => 0.000025000000000000004586175190 compiler: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 atof: 0x1.2599ed7c6fbd200000000000000000p-15 => 0.000034999999999999996933876256 calc: 0x1.2599ed7c6fbd300000000000000000p-15 => 0.000035000000000000003710139834 compiler: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 atof: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 calc: 0x1.797cc39ffd60f00000000000000000p-15 => 0.000045000000000000002834104479 compiler: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 atof: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 calc: 0x1.cd5f99c38b04b00000000000000000p-15 => 0.000055000000000000001958069124 compiler: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 atof: 0x1.10a137f38c54300000000000000000p-14 => 0.000064999999999999994305770190 calc: 0x1.10a137f38c54400000000000000000p-14 => 0.000065000000000000007858297346