VC++ 2008 express 上的浮点乘法
Floating point multiplication on VC++ 2008 express
为什么是下面的片段
int i = 30;
int p = 0.7f * i;
printf("p is %d\n", p);
在 vc++ 2008 express 上给出 20 而不是 21?
我知道这是一个旧的编译器!
数字 0.7 在您的编译器用于 float
的基于二进制的浮点格式中不可表示。当十进制数“0.7”转换为float
时,结果是最接近的可表示值。这是一个略低于 0.7 的数字。
将其乘以 30 得到略低于 21 的数字,将其转换为 int
并截断得到 20。
为什么是下面的片段
int i = 30;
int p = 0.7f * i;
printf("p is %d\n", p);
在 vc++ 2008 express 上给出 20 而不是 21? 我知道这是一个旧的编译器!
数字 0.7 在您的编译器用于 float
的基于二进制的浮点格式中不可表示。当十进制数“0.7”转换为float
时,结果是最接近的可表示值。这是一个略低于 0.7 的数字。
将其乘以 30 得到略低于 21 的数字,将其转换为 int
并截断得到 20。