私が得る8個の浮動小数値の最大値と最小値を求める必要があります。私は次のようにしました。しかし、浮動小数点の比較は、良いCの本によって警告されるようにうまくいっていません! maxとminを正確に計算するにはどうすればよいですか?8個の浮動小数点値の最大値/最小値を計算する方法
main()
{
float mx,mx1,mx2,mx3,mx4,mn,mn1,mn2,mn3,mn4,tm1,tm2;
mx1 = mymax(2.1,2.01); //this returns 2.09999 instead of 2.1 because a is passed as 2.09999.
mx2 = mymax(-3.5,7.000001);
mx3 = mymax(7,5);
mx4 = mymax(7.0000011,0); //this returns incorrectly- 7.000001
tm1 = mymax(mx1,mx2);
tm2 = mymax(mx3,mx4);
mx = mymax(tm1,tm2);
mn1 = mymin(2.1,2.01);
mn2 = mymin(-3.5,7.000001);
mn3 = mymin(7,5);
mn4 = mymin(7.0000011,0);
tm1 = mymin(mx1,mx2);
tm2 = mymin(mx3,mx4);
mn = mymin(tm1,tm2);
printf("Max is %f, Min is %f \n",mx,mn);
getch();
}
float mymax(float a,float b)
{
if(a >= b)
{
return a;
}
else
{
return b;
}
}
float mymin(float a,float b)
{
if(a <= b)
{
return a;
}
else
{
return b;
}
}
これらの浮動小数点数を正確に比較するにはどうすればよいですか?これはすべてのCコードです。
ありがとうございました。
-AD。
「フロート」データ型の精度は、ここで何をしようとしているのかでは不十分です。 IEEE754の 'float' - http://en.wikipedia.org/wiki/Binary32 - 符号/指数/仮数のための' 1 + 8 + 23'ビットしかなく、丸め誤差はすでに6桁の10進数で非常に見えるようになります。 'double'やGMPのような任意精度の数学ライブラリを使うことができない特別な理由はありますか? –
'float'の代わりに' double'を使うと正確に表現できないという問題は解決しません。 –
正確にはdoubleを使うとこの場合は役に立ちません。 – goldenmean