在对这个问题的跟进中,似乎有些数字根本不能用浮点表示,而是近似的.
如何存储浮点数?
是否有不同尺寸的通用标准?
如果我使用浮点,我需要注意什么样的问题?
它们是否是跨语言兼容的(即,我需要处理哪些转换才能通过TCP/IP将python程序中的浮点数发送到C程序)?
-亚当
如上所述,关于IEEE 754的维基百科文章很好地展示了如何在大多数系统上存储浮点数.
现在,这里有一些常见的问题:
最大的问题是你几乎不想比较两个浮点数的相等(或不等式).您需要使用大于/小于比较.
您对浮点数执行的操作越多,可能会出现更严重的舍入错误.
精度受分数大小的限制,因此您可能无法正确添加以几个数量级分隔的数字.(例如,您将无法将1E-30添加到1E30.)
关于浮点数的问题的详尽解释在每个计算机科学家应该知道的关于浮点运算的文章中给出.
标准是IEEE 754.
当然,当IEE754不够好时,还有其他方法来存储数字.像Java这样的库BigDecimal
可用于大多数平台,并且可以很好地映射到SQL的数字类型.符号可用于无理数,无法以二进制或十进制浮点精确表示的比率可以存储为比率.
至于问题的第二部分,除非性能和效率对您的项目很重要,否则我建议您将浮点数据作为字符串通过TCP/IP传输.这样可以避免字节对齐等问题,并且可以简化调试.