拘束具なわけですよ。でリミッタ外すと暴走しやすくなっちゃうという。例えばこの挙動説明できますかーという話。
#include <stdio.h> int main() { printf("%f\n", sinf(10)); }
こんな普通のコード。
i@um ~/test> gcc fsin.c fsin.c: In function 'main': fsin.c:3: warning: incompatible implicit declaration of built-in function 'sinf' i@um ~/test> ./a.out -0.544021 i@um ~/test> gcc fsin.c -fno-builtin i@um ~/test> ./a.out 0.000000
Linux でもやってみる。
i@u ~/test> gcc fsin.c -lm fsin.c: In function 'main': fsin.c:3: warning: incompatible implicit declaration of built-in function 'sinf' i@u ~/test> ./a.out -0.544021 i@u ~/test> gcc fsin.c -lm -fno-builtin i@u ~/test> ./a.out -0.226913 i@u ~/test> ./a.out -1.687096 i@u ~/test> ./a.out -0.012923 i@u ~/test> ./a.out -0.699833 i@u ~/test> ./a.out -0.014358
Linux では毎度動作が変わるぞ! これはステキだ! fsin ってのは疑似乱数作る関数だったんだね。
追記: ざんねん! この疑似乱数は CPU に依存しちゃうんだ!
i@uk:~$ uname -a Linux uk 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc GNU/Linux i@uk:~$ gcc fsin.c -lm i@uk:~$ ./a.out -0.544021 i@uk:~$ gcc fsin.c -lm -fno-builtin i@uk:~$ ./a.out 0.000000
http://alohakun.blog7.fc2.com/blog-entry-685.html#comment
というわけで別に実装だの仕様だの見るまでもなく動作サンプル見たら別に本来のシグネチャなんて調べてないのは明白な気がするのですがーという。