簡體   English   中英

公式為同一變量返回不同的值

[英]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.

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