簡體   English   中英

python數學,numpy模塊不同的結果?

[英]python math, numpy modules different results?

計算一個值的余弦會得到略微不同的結果。 如何檢查這種差異是否在機器精度范圍內?

import math
math.cos(60.0/180.0*math.pi)
-> 0.5000000000000001

import numpy
numpy.cos(60.0/180.0*numpy.pi)
-> 0.50000000000000011

差異似乎只是由格式化例程引起的:

>>> '%.30f' % math.cos(60./180.*math.pi)
'0.500000000000000111022302462516'
>>> '%.30f' % np.cos(60./180.*np.pi)
'0.500000000000000111022302462516'

請注意, np.cos返回np.float64而不是float ,顯然默認情況下該類型的打印方式不同。 在通用硬件上,它們都實現為64位double精度,因此精度沒有實際差異。

雙精度算術為您提供15-16十進制有效數字的精度。 這兩個值同意這種精確度。 這里沒什么可擔心的。

注意,我說十進制與用於雙精度值的二進制表示中的有效的53個二進制位形成對比。

盡管你的數字相同,但知道如何以完全精確的方式檢查它們仍然很有用。 以下是幾種方法:

>>> a = 1.1 + 2.2
>>> b = 3.3
>>> a == b
False
>>> from decimal import Decimal
>>> Decimal.from_float(a)
Decimal('3.300000000000000266453525910037569701671600341796875')
>>> Decimal.from_float(b)
Decimal('3.29999999999999982236431605997495353221893310546875')
>>> a.hex()
'0x1.a666666666667p+1'
>>> b.hex()
'0x1.a666666666666p+1'
>>> a.as_integer_ratio()
(7430939385161319, 2251799813685248)
>>> b.as_integer_ratio()
(3715469692580659, 1125899906842624)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM