相关疑难解决方法(0)

为什么浮点数不准确?

为什么有些数字在存储为浮点数时会失去准确性?

例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)的比率,两者都可以用二进制(0b1011100/0b1010)精确表示.但是,存储为浮点数的相同比率永远不会完全等于9.2:

32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875
Run Code Online (Sandbox Code Playgroud)

这样一个看似简单的数字如何在64位内存中表达"太大" ?

language-agnostic floating-point precision

181
推荐指数
4
解决办法
3万
查看次数

Python中的舍入错误与非奇数?

我是Python的初学者,我有一个问题.
为什么舍入一个数字,如5.5,7.5,(任何).5与奇数整数部分应用round(num)正常工作(规则5/4),但舍入数字像(任何).5与非奇数整数部分由同一函数返回整数部分?(但是如果我们在这个十进制数字上添加一个像0.000000001这样的小数字就能正常工作)

我的意思是下一个:

round(9.5)
Run Code Online (Sandbox Code Playgroud)

返回10,这是正确的.但

round(8.5)
Run Code Online (Sandbox Code Playgroud)

返回8,这是不正确的.和

round(8.5 + 0.0000000000001)
Run Code Online (Sandbox Code Playgroud)

返回9.

为什么它不正确?
我在Windows上使用Python 3.2.2.

python rounding python-3.x

9
推荐指数
1
解决办法
2703
查看次数

numpy`rint`奇怪的行为

这个问题是关于numpy.rint,根据定义,该值将四舍五入到最接近的整数。但是,以下代码会产生不一致的结果。

In [1]: import numpy as np
        for i in range(5, 105, 10):
            print(i, np.rint(i/10))
Out[1]: 5 0 # Should be 1
        15 2 # Correct
        25 2 # Should be 3
        35 4 # Correct
        45 4 # Should be 5
        55 6 # Correct
        65 6 # Should be 7
        ...
Run Code Online (Sandbox Code Playgroud)

因此,似乎存在一种模式:如果除以10后,单位位置是偶数,则将数字四舍五入,但如果单位位置是奇数,则将数字四舍五入。但是,根据四舍五入规则,单位位置应该没有关系!

要么numpy使用“四舍五入”,即正好一半,四舍五入到下一个整数,要么使用“四舍五入”。它不能同时做到,而且前后不一致。

通常,我会为此打开一个错误报告numpy,但是我不确定这是numpy不是很奇怪,或者是关于python解释浮点数的一些潜在的怪癖,还是由于转换到二进制和返回时的精度损失

请注意,numpy.round(i, 0)其行为也相同。


解决方法是在除以10:之后添加一小部分numpy.rint(i/10 + 0.1),然后答案正确。

python numpy python-3.x

2
推荐指数
1
解决办法
270
查看次数