1
2
首先,听起来像是Windows有它
如果你还没读过 “如何准确打印浮点数” 斯蒂尔和怀特,找一本读一下。这绝对是一本很有启发性的读物。一定要找到70年代末的原件。我想我是从ACM或IEEE那里买的。 |
2
2
我不认为Windows在这里做了什么特别聪明的事情(比如试图重新解释以10为基数的浮点值):我猜它只是准确地计算前17位有效数字(这将得到“11.545000000000000”),然后在末尾加上额外的零,以补补上点后所要求的位数。 正如其他人所说,0.125的不同结果来自Windows使用round-half-up和Linux使用round-half-to-even。 请注意,对于Python3.1(以及Python2.7,当它出现时),格式化浮点值的结果将与平台无关(除非可能在不寻常的平台上)。 |
3
1
可以从int或字符串构造十进制数。在你的例子中,输入一个比你想要的数字更多的字符串,然后通过设置上下文.prec. 下面是一个链接,链接到pymotw post,其中包含十进制模块的详细概述: http://broadcast.oreilly.com/2009/08/pymotw-decimal---fixed-and-flo.html |
4
0
|
5
0
|
6
0
您可以尝试减去(或为负数加上)一个小的增量,这对距离精度足够远的数字的舍入没有影响。
例如,如果你用
浮点数是出了名的问题,如果你不知道下面发生了什么。在这种情况下,最好的办法是编写(或使用)十进制类型库来缓解问题。
更新: 叶夫根尼,根据你的评论:
这就是为什么我说你必须检查整个范围,看看它是否能工作,为什么我说十进制数据类型更好。 如果你想要小数精度,那就是你必须要做的。但是你可能想考虑一下Linux也会走另一条路的情况(根据你的评论)——可能会有Linux和Windows在与你发现的相反的方向上不一致的情况——十进制类型可能解决不了这个问题。 你可能需要让你的比较工具更智能一点,因为它们可以忽略最后一个分数的1的差异。 |
Rik Bloemers · for循环不接受任何浮点变量 2 年前 |
zell · 为什么存储7个浮点数需要34字节? 2 年前 |
Atharva Sunil Sathe · 如何删除任意数的小数点? 2 年前 |
user1658887 · 为什么**2!=a*a一些彩车? 6 年前 |