我对可能的数据丢失有一个温和的警告
warning C4244: ‘argument’ : conversion from ‘const int’ to ‘float’,possible loss of data
题
我记得,如果float有比int更大的精度.那么如果我从较小的数据类型(int)转换为更大的数据类型(float),那么数据如何丢失?
解决方法
因为浮点数不精确.即使浮点数的最大值高得多,也不能表示int可以持有到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); } }
你会很快看到有数千个整数不能被表示为浮点数.例如,16,777,219和16,221之间的所有整数表示为16,220.
再次编辑运行上面的程序表示有2,071,986,175个正整数,不能精确地表示为浮点数.这让你大概只有一亿正则整数适合浮动.这意味着当将它放入浮点数时,只有21中的整数是正确的.
我预计数字对于负整数是相同的.