次のコードを検討してください。
#include<stdio.h>
#define k 0.7
#define p 0.5
int main()
{
float a=k,b=p;
double aa=k;
if(a<k)
{
if(b<p) printf("2 is right");
else printf("1 is right");
}
else printf("0 is right");
printf("\n");
if(a>k)
{
if(b<p) printf("2 is right");
else printf("1 is right");
}
else printf("0 is right");
return 0;
}
これをこの質問のパートIIと見なしてください。ここでの理解は、浮動小数点定数の倍精度値(数値定数として表される場合は2倍)が、対応する浮動小数点値に変換されたときに失われるということでした。例外的な値はX.5とX.0でした。しかし、私は次の結果を観察しました:
Input Output
K=0.1 to 0.4 0 is right
1 is right
K=0.5 0 is right
1 is right
K=0.6 0 is right
1 is right
K=0.7 1 is right
0 is right
K=0.8 0 is right
1 is right
K=0.9 1 is right
0 is right
K=8.4 1 is right
0 is right
なぜこの奇妙な振る舞いなのですか?このプロパティを表示している浮動小数点値が少ないのはなぜですか?float
精度の値が常に精度の値よりも小さいと仮定することはできませんdouble
か?この動作をどのように説明しますか?