[英]Equation return different values for the same variable
我正在嘗試創建一個圖表,但它看起來不正確。 對於范圍(0,1000000),圖表應從0開始並在x軸處結束,但它具有負值。 在乞討中它沒關系,但經過一些價值,它就會出錯。
我試圖手動計算特定值,並發現方程中相同值的結果不同。 這是一個例子:
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
print(y)
plt.plot(x, y)
plt.show()
formula = '1-((2**32-1)/2**32)**(x*(x-1)/2)'
graph(formula, range(80300, 80301))
x = 80300
print(eval(formula))
對於相同的值有不同的結果,這是控制台輸出:
[-0.28319476]
0.5279390283223464
我不知道為什么相同的公式和價值會有不同的結果。 正確的是0.5279390283223464。
要使代碼正常工作,請使用更大的數據類型,即(dtype =“float64”),將代碼編輯為:
x = np.array(x_range, dtype="float64")
或者如果你想讓2個結果在精度上匹配加[0]
x = np.array(x_range, dtype="float64")[0]
x = np.array(x_range, dtype="float32")[0]
了解原因,請閱讀以下內容:
如果您將代碼中的公式更改為簡單的公式(例如,公式=“x + 100”),您將獲得正確的結果
這是什么意思? 這意味着你的公式'1 - ((2 32-1)/ 2 32)**(x *(x-1)/ 2)'導致numpy“numpy內置C而不是python”的溢出
我嘗試了以下代碼來縮小問題的可能性:
formula = '1-((2**32-1)/2**32)**(x*(x-1)/2)'
x = 80300
print(eval(formula))
x = np.array(range(80300, 80301))[0]
print(eval(formula))
來自sublime Text >>>的輸出
0.5279390283223464
RuntimeWarning: overflow encountered in long_scalars
import numpy as np
-0.28319476138546906
這支持了我的觀點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.