gpt4 book ai didi

c++ - 如果硬编码 float 可以用 IEEE 754 中的二进制格式表示,它是否精确?

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

例如,0、0.5、0.15625、1、2、3... 是从 IEEE 754 转换而来的值。它们的硬编码版本是否精确?

例如:

float a=0;
if(a==0){
return true;
}

总是返回真?其他例子:

float a=0.5;
float b=0.25;
float c=0.125;

a * b 是否总是等于 0.125 而 a * b==c 总是为真?还有一个例子:

int a=123;
float b=0.5;

a * b 总是 61.5 吗?或者一般来说,整数乘以 IEEE 754 二进制 float 是否精确?

或者一个更普遍的问题:如果值是硬编码的,并且值和结果都可以用 IEEE 754 中的二进制格式表示(例如:0.5 - 0.125),那么该值是否精确?

最佳答案

float 本身没有模糊性。只是有些(但不是全部)实数不能精确表示。

与固定宽度的十进制表示法相比,假设是三位数字。整数1可以表示,用1.00,1/10可以表示,用0.10,1/3只能近似,用0.33。

如果我们改用二进制数字,整数 1 将表示为 1.00(二进制数字),1/2 表示为 0.10,1/4 表示为 0.01,但 1/3 只能(再次)近似。

不过有一些事情要记住:

  • 这不是与十进制数字相同的数字。 1/10即可使用十进制数字准确地写为 0.1,但不使用二进制数字,无论您使用多少(无穷大)。
  • 在实践中,很难跟踪哪些数字可以是
    有代表,而不能。 0.5可以,0.4不可以。所以当你需要确切的数字,例如(经常)在处理金钱时,你不应该使用 float 。
  • 根据一些消息来源,一些处理器会做一些奇怪的事情在内部对数字执行浮点计算时无法准确表示,导致结果在某种程度上有所不同也就是说,在实践中是不可预测的。

(我的观点是,这实际上是一个合理的初步近似,是的, float 本质上是模糊的,所以除非您确定您的特定应用程序可以处理它,否则请远离它们.)

有关您可能需要或想要的更多详细信息,请阅读著名的 What Every Computer Scientist Should Know About Floating-Point Arithmetic .此外,这个更易于访问的网站:The Floating-Point Guide .

关于c++ - 如果硬编码 float 可以用 IEEE 754 中的二进制格式表示,它是否精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646148/

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