> > generates the same output and same assembly > > for both casts. can anyone explain what this pragma > > is supposed to do? > > it changes the rounding mode from the standard > truncate to integer (expensive on a 387) to > round to nearest (incorrect but cheap).
sure enough. here's timings in µsec for 1<<20 cycles slow fast factor amd64 (2.0ghz) 82717 2873 29 xeon 5000 (1.6ghz) 17595 1963 9 core i7 (2.6ghz) 4734 1185 4 > #pragma fpround on > print("%d\n", (int)d); > #pragma fpround 0 > print("%d\n", (int)d); > > your examples compiles to the same code in both > cases because the rounding mode is only consulted > during code generation, which happens at the > function's final }. you'd need to write two different > functions to demonstrate the difference. ah. that escaped me. thanks. it would be good to document somwhere. would updating /sys/doc/compiler.ms be a really bad idea? - erik