gpt4 book ai didi

c++ - 关于数据丢失的警告 c++/c

转载 作者:可可西里 更新时间:2023-11-01 16:27:01 27 4
gpt4 key购买 nike

我收到关于可能的数据丢失的良性警告

warning C4244: 'argument' : conversion from 'const int' to 'float', possible loss of data

问题

我记得好像 float 的精度比 int 大。那么,如果我从较小的数据类型 (int) 转换为较大的数据类型 (float),数据怎么会丢失呢?

最佳答案

因为 float 数字不精确。您无法将 int 可以保存到 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);
}
}

您很快就会发现有 thousands 数十亿个整数无法表示为 float。例如,范围 16,777,219 和 16,777,221 之间的所有整数都表示为 16,777,220。

再次编辑 运行上面的程序表明有 2,071,986,175 整数无法精确表示为 floats。这让您大致只有 1 亿个正整数可以正确放入 float。这意味着当您将 21 放入 float 时,只有一个整数是正确的。

我希望负整数的数字相同。

关于c++ - 关于数据丢失的警告 c++/c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com