是否有可能将c和python中的数字操作与机器精度级别相匹配?

是否有可能将c和python中的数字操作与机器精度级别相匹配?,python,c,precision,Python,C,Precision,我想将C和Python之间的滚动移动平均值的结果匹配到机器精度级别。这是傻瓜的差事吗 C语言的原始代码(来自talib的[]财务库:) 下面的代码片段是我自己的简单移动平均线的一个简单循环,为了更好地度量,我还加入了一个熊猫滚动平均线 输出(第三列是误差,我猜规律性会喊出“机器精度”): 以及守则: import numpy as np import pandas as pd import talib np.random.seed(999) period = 12 ts = pd.Series(

我想将C和Python之间的滚动移动平均值的结果匹配到机器精度级别。这是傻瓜的差事吗

C语言的原始代码(来自talib的[]财务库:)

下面的代码片段是我自己的简单移动平均线的一个简单循环,为了更好地度量,我还加入了一个熊猫滚动平均线

输出(第三列是误差,我猜规律性会喊出“机器精度”):

以及守则:

import numpy as np
import pandas as pd
import talib
np.random.seed(999)
period = 12
ts = pd.Series(np.random.randn(1000))

pd.set_option('display.max_rows', 10000)
pd.set_option('display.max_columns', 10000)
pd.set_option('display.width', 1000)
pd.set_option('display.float_format', lambda x: '%.32f' % x)


def manual_sma(prices, n):
    prices = prices.astype(np.double)
    ma = np.zeros_like(prices)
    ma[:n] = np.nan

    for i in range(n-1, len(prices)):
        ma[i] = np.nanmean(prices[i-n+1:i+1])
    return pd.Series(ma)


my_sma = manual_sma(ts, period)
pandas_sma = ts.rolling(period, min_periods=period).mean()
talib_sma = talib.SMA(ts, timeperiod=period)

df = pd.concat((talib_sma, my_sma), axis=1)
df.columns = ['talib', 'mine']
df['errors'] = df['talib'] - df['mine']
print(df.iloc[:40])

由于Python代码最终使用与C代码相同的机器指令执行,这是可能的。如果使用CPython,它甚至使用相同的数学函数。由于Python代码最终使用与C代码相同的机器指令执行,这是可能的。如果使用CPython,它甚至使用相同的数学函数。
import numpy as np
import pandas as pd
import talib
np.random.seed(999)
period = 12
ts = pd.Series(np.random.randn(1000))

pd.set_option('display.max_rows', 10000)
pd.set_option('display.max_columns', 10000)
pd.set_option('display.width', 1000)
pd.set_option('display.float_format', lambda x: '%.32f' % x)


def manual_sma(prices, n):
    prices = prices.astype(np.double)
    ma = np.zeros_like(prices)
    ma[:n] = np.nan

    for i in range(n-1, len(prices)):
        ma[i] = np.nanmean(prices[i-n+1:i+1])
    return pd.Series(ma)


my_sma = manual_sma(ts, period)
pandas_sma = ts.rolling(period, min_periods=period).mean()
talib_sma = talib.SMA(ts, timeperiod=period)

df = pd.concat((talib_sma, my_sma), axis=1)
df.columns = ['talib', 'mine']
df['errors'] = df['talib'] - df['mine']
print(df.iloc[:40])