花井@京都です.
ちょっと詳しい方教えて下さい.
x86 の Vine-2.5 で
#include <stdio.h>
int main(void)
{
long double x, y;
x = 3.14159;
y = x * x * x * x * x;
printf("x^5 = %14.5E\n", y);
return 0;
}
なプログラムを作って, gcc でコンパイルし,実行すると,
$ ./long_dbl_test
x^5 = -3.29556E-188
となってしまいます.
一方,printf("x^5 = %14.5E\n", y); を
printf("x^5 = %14.5E\n", (double) y); としておくと,
$ ./long_dbl_test
x^5 = 3.06018E+02
と正しい答を表示します.printf は long double では
使えないのでしょうか?
$ rpm -q gcc
gcc-2.95.3-2vl22
です.ppc や alpha ではこんなことにならないようです.
(long double のままでも正しい答を表示します)