Tho*_*ber 3 c floating-point floating-accuracy
为什么这样:
int main(void)
{
short w = 30;
return 1.2 * w;
}
Run Code Online (Sandbox Code Playgroud)
回35?
小智 12
1.2 * w是36.0.它具有双重类型,意味着它没有完全表示.
可能它稍微小于36,也许是35.99999这样,当你返回时,小数部分被丢弃,只返回整数部分.这就是你得到的35.
PS所有浮点运算都不精确.你应该期待很少的差异.此外,当您将浮点值与固定值进行比较时,您不能进行直接比较,而是进行范围比较.
错误: if (value == 36.0) { /* ... */ }
正确: if (abs (value - 36.0) < 0.0001) { /* ... */ }