我正在收到关于可能的数据丢失的良性警告
警告C4244:'argument':从'const int'转换为'float',可能会丢失数据
题
我记得浮动的精度比int大.那么如果我从较小的数据类型(int)转换为更大的数据类型(float),数据如何丢失?
zne*_*eak 14
因为float 数字不准确.即使inta float的最大值float更高,也无法表示可以容纳的所有可能值.
例如,运行这个简单的程序:
#include <stdio.h>
int main()
{
for(int i = 0; i < 2147483647; i++)
{
float value = i;
int ivalue = value;
if(i != ivalue)
printf("Integer %d is represented as %d in a float\n", i, ivalue);
}
}
Run Code Online (Sandbox Code Playgroud)
您很快就会发现有数千亿的整数无法表示为floats.例如,范围16,777,219和16,777,221之间的所有整数表示为16,777,220.
再次编辑运行上面的程序表明有2,071,986,175个 正整数不能精确表示为floats.这使得你大致只有1亿正整数适合一个正整数float.这意味着当你将它放入浮点数时,只有21中的一个整数是正确的.
我希望负整数的数字相同.
在大多数体系结构上int并且float大小相同,因为它们具有相同的位数.但是,在浮点数中,这些位在指数和尾数之间分开,这意味着浮点数中的精度位数实际上比int小.但是,对于较大的整数,这可能只是一个问题.
在a int为32位的系统上,a double通常为64位,因此可以精确地表示任何int.
| 归档时间: |
|
| 查看次数: |
5229 次 |
| 最近记录: |