ごとけんです

In message "[ruby-math:00162] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/01/28, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>|ええ! そんなことないでしょう。float は float のまま計算され
>|ますよ。それって何かに書いてありますか??
>
>[ruby-dev:8879]はそういう意味ではないかと。ああ、でも古いCの
>話なのかなあ。

そうかも知れません。下を試してみてはどうでしょう。
# ってこういうことではなく??

echo 'double f(float  x, float  y){return (double)(x+y);}' > f.c
echo 'double f(double x, double y){return x+y;}' > d.c
gcc -S -O2 f.c d.c
diff -u f.s d.s
\rm -f f.c d.c

またリテラルの違いもあるともいます。Rubyのリテラル0.1はCの
doubleリテラルと同じなんだけど、Cのfloatリテラル相当の値は作
れないですね。まぁpack/unpackを駆使すれば出来るけど、そんな
ことがしたいのでなくてNumPyのように電卓としても使いたいわけ
で。もちろん浮動小数点数に絶対的な正しさはないのでこの電卓は
検証のために使うわけです。

それに内部にしかfloatがないと下みたいなこともあります。

% cat foo.c
#include <stdio.h>
main()
{
  float f0,f1;
  double d0,d1,yf,yd;

  d0 = 0.1; d1 = 0.7; /* Ruby side */
  f0 = d0;  f1 = d1;  /* via float */

  yf = f1-f0;
  yd = d1-d0;

  printf("Ruby side: %f<.6: %s\n", yd, yd<.6?"true":"false");
  printf("via flaot: %f<.6: %s\n", yf, yf<.6?"true":"flase");
}
% gcc foo.c && ./a.out
Ruby side: 0.600000<.6: false
via flaot: 0.600000<.6: true
%

-- gotoken