gpt4 book ai didi

binary - 十进制 float 与二进制的相互转换

转载 作者:行者123 更新时间:2023-12-02 09:24:26 26 4
gpt4 key购买 nike

简而言之,我的问题是,为什么 float 中的舍入误差仅在计算后出现,而不是在存储文字时出现?

我的意思是 -我知道在十进制与二进制相互转换时由于 float 的舍入误差而出现的问题。

例如,在 Java 中:

double a = 10.567;
double b = 2.16;
double c = a * b;

c 然后存储值 22.824720000000003,而不是 22.82472。

这是因为double类型的有限二进制数无法准确存储结果22.82472。 但是,10.567 和 2.16(即 a 和 b)也不能。

但是如果我打印 a 和 b 的值,它们会被准确地打印出来,没有任何舍入误差。为什么这里没有显示舍入误差?

这是否意味着浮点文字的表示与浮点计算结果的表示有所不同?

最佳答案

文字转换中存在舍入误差,它恰好对您隐藏。 10.567 无法用二进制表示,因此它会四舍五入到最接近的可表示的 double 值,即

10.56700000000000017053025658242404460906982421875

但是,该算法不是打印确切的值(这会相当烦人),而是打印尽可能少的数字,这样如果将其转换回二进制,它将给出相同的值(在本例中为“10.567”) .

事实证明,对于double,您可以对最多 15 位的任何小数执行此操作,请参阅 http://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/ .

关于binary - 十进制 float 与二进制的相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011905/

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