Python 3.x 为什么numpy将真正小的数字视为零?

Python 3.x 为什么numpy将真正小的数字视为零?,python-3.x,numpy,Python 3.x,Numpy,我正在做一个优化任务。考虑“球面基准函数”的两个维度: 函数的代价为零,其中x和y为零。然而,考虑这个例子: import numpy as np X = np.array([-6.5333928195191023e-163, 2.7628829205465545e-163]) Y = X**2 # [0, 0] cost = np.sum(Y) # zero print(cost) # zero 成本不应该是零,但它是零。是否有办法解决此问题?普通浮点精度将把数字截断为零。如果您真的想使

我正在做一个优化任务。考虑“球面基准函数”的两个维度:

函数的代价为零,其中x和y为零。然而,考虑这个例子:

import numpy as np
X = np.array([-6.5333928195191023e-163,  2.7628829205465545e-163])
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero

成本不应该是零,但它是零。是否有办法解决此问题?

普通浮点精度将把数字截断为零。如果您真的想使用这么小的值,可以执行以下操作:

X = np.array([-6.5333928195191023e-163,  2.7628829205465545e-163], dtype=np.longdouble)
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero
>> 5.0318743766791623303e-325
X = np.array([-6.5333928195191023e-163,  2.7628829205465545e-163], dtype=np.longdouble)
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero
>> 5.0318743766791623303e-325