How is floating point stored? When does it matter?在解决这个问题时,似乎有些数字根本不能用浮点表示,而是近似的。 浮点数如何存储? 有不同尺寸的通用标准吗? 如果我使用浮点数,我需要注意哪些陷阱? 它们是否跨语言兼容(即,为了通过TCP / IP将浮点数从python程序发送到C程序,我需要处理哪些转换)? 如前所述,有关IEEE 754的Wikipedia文章很好地展示了如何在大多数系统上存储浮点数。 现在,这是一些常见的陷阱:
每位计算机科学家应该了解的有关浮点算法的文章中,都对浮点数问题进行了详尽的解释。 至于问题的第二部分,除非性能和效率对您的项目很重要,否则我建议您将浮点数据作为字符串通过TCP / IP传输。这样可以避免字节对齐等问题,并简化调试。 该标准是IEEE 754。
当然,当IEE754不够好时,还有其他方法可以存储数字。像Java的
正确。
正如其他海报所提到的,IEEE754及其后续版本几乎全部
几乎没有,它们是跨语言兼容的。 极为罕见的怪癖:
基本上,在浮点数中您需要担心的是,精度位数有限。在测试相等性时,或者您的程序实际上需要的精度比该数据类型所提供的精度高时,这可能会导致问题。 在C ++中,一个好的经验法则是认为浮点数给您7位数的精度,而双精度数给您15的精度。另外,如果您想知道如何测试相等性,可以查看此问题线程。 是的,存在二进制浮点算术的IEEE标准(IEEE 754) 当以二进制形式存储时,数字分为三部分,符号,指数和分数。 标题为" IEEE标准754浮点数"的本文可能会有所帮助。老实说,我不太确定我是否理解您的问题,因此不确定是否会有所帮助,但希望会有所帮助。 如果您真的担心浮点舍入错误,则大多数语言都提供了没有浮点错误的数据类型。 SQL Server具有Decimal和Money数据类型。 .Net具有十进制数据类型。它们不像Java中的BigDecimal那样精确无穷,但精确到定义的小数点位数。因此,您不必担心输入的美元值会变成$ 4.58,而另存为4.579999999999997的浮点值 我记得是一个32位浮点数,使用24位实际数字存储,其余8位用作10的幂,确定小数点在哪里。 我对这个问题有点不满意... |