当前位置:  开发笔记 > 编程语言 > 正文

舍入浮动与表示错误到最接近和正确的结果

如何解决《舍入浮动与表示错误到最接近和正确的结果》经验,为你挑选了2个好方法。

我有一种情况,当Python中的经典表示错误开始成为一个问题:我需要它们用于Numpy中的Matrix操作,并且还不支持十进制类型.

你们都知道,如果我这样做,111.85 * 111.85我会得到,12510.422499999999但如果round(12510.422499999999, 4)我能得到正确的结果,那当然12510.4225.

但实际问题是:

这轮会是一个好主意和一个好习惯吗?

这适用于所有情况吗?有时小数位置,其中..999小数可能更多

最后,如何获得适当的小数位数以用于所有可能值的回合?

Brendan Abel.. 6

即使你对数字进行四舍五入,小数仍然不会完全符合你的预期.Python可能只显示最高有效位,但基础十进制不准确仍然存在.

python docs 专门用它来创建一个部分

由于显示值的方式,许多用户不知道近似值.Python仅将十进制近似值打印到机器存储的二进制近似值的真实十进制值.在大多数机器上,如果Python要打印存储为0.1的二进制近似值的真实十进制值,则必须显示

>>> 0.1
0.1000000000000000055511151231257827021181583404541015625

这比大多数人认为有用的数字更多,因此Python通过显示舍入值来保持可管理的位数

>>> 1 / 10
0.1

对于大多数用例,可以安全地忽略不准确性.如果您处理极小或极大的数字或需要精确到多个小数位,您可以使用十进制 库

 >>> Decimal('111.85') * Decimal('111.85')
 Decimal('12510.4225')


wim.. 5

这里真正的问题是确定表示错误如何首先成为一个问题.

您不应该使用该表示形式进行人类可读的浮动打印,您应该使用例如str.format或其他一些表示方法.

将您的数字保存为所有计算的数字(无论您是使用浮点数还是小数或其他数字......)并且只在展示时对事物进行舍入或截断.



1> Brendan Abel..:

即使你对数字进行四舍五入,小数仍然不会完全符合你的预期.Python可能只显示最高有效位,但基础十进制不准确仍然存在.

python docs 专门用它来创建一个部分

由于显示值的方式,许多用户不知道近似值.Python仅将十进制近似值打印到机器存储的二进制近似值的真实十进制值.在大多数机器上,如果Python要打印存储为0.1的二进制近似值的真实十进制值,则必须显示

>>> 0.1
0.1000000000000000055511151231257827021181583404541015625

这比大多数人认为有用的数字更多,因此Python通过显示舍入值来保持可管理的位数

>>> 1 / 10
0.1

对于大多数用例,可以安全地忽略不准确性.如果您处理极小或极大的数字或需要精确到多个小数位,您可以使用十进制 库

 >>> Decimal('111.85') * Decimal('111.85')
 Decimal('12510.4225')



2> wim..:

这里真正的问题是确定表示错误如何首先成为一个问题.

您不应该使用该表示形式进行人类可读的浮动打印,您应该使用例如str.format或其他一些表示方法.

将您的数字保存为所有计算的数字(无论您是使用浮点数还是小数或其他数字......)并且只在展示时对事物进行舍入或截断.


@GermanRosales:你原来的预先回答的答案已经准确到小于0.7 ulps.如果这个准确度不够好(为什么不呢?)那么float64将无法满足您的需求.但是你应该弄清楚你是否真的需要那么高的准确度.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有