我目前正在学习cpp中的类型间数据转换。我被教导说
对于一个非常大的整数,我们(对于某些计算机)可能会遭受损失
转换为双精度时的精度。
但该声明没有提供理由。
有人可以提供解释和例子吗?谢谢
假设浮点数使用 N 位存储。
现在,我们假设这个浮点数可以精确地表示N位整数类型可以表示的所有整数。由于 N 位整数需要其所有 N 位来表示其所有值,因此对此浮点数的要求也是如此。
浮点数应该能够表示小数。然而,由于所有位都用于表示整数,因此还剩下零位来表示任何小数。这是一个矛盾,我们必须得出这样的结论:float 可以精确地将所有整数表示为相同大小的整数类型的假设一定是错误的。
由于在 N 位整数范围内必定存在不可表示的整数,因此如果转换后的值恰好是不可表示的整数之一,则将此类整数转换为 N 位浮点数可能会丢失精度。
Now, since a floating point can represent a subset of rational numbers, some of those representable values may indeed be integers. In particular, the IEEE-754 spec guarantees that a binary double precision floating point can represent all integers up to 253. This property is directly associated with the length of the mantissa.
因此,在符合 IEEE-754 的系统上转换为双精度时,不可能丢失 32 位整数的精度。
从技术上讲,x86 架构的浮点单元实际上使用 80 位扩展浮点格式,该格式旨在能够精确表示所有 64 位整数,并且可以使用long double
type.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)