programing

python numpy 시스템 엡실론

css3 2023. 7. 19. 21:32

python numpy 시스템 엡실론

저는 기계 엡실론이 무엇인지 이해하려고 노력하고 있습니다.위키백과에 따르면 다음과 같이 계산할 수 있습니다.

def machineEpsilon(func=float):
    machine_epsilon = func(1)
    while func(1)+func(machine_epsilon) != func(1):
        machine_epsilon_last = machine_epsilon
        machine_epsilon = func(machine_epsilon) / func(2)
    return machine_epsilon_last

그러나 두 배의 정밀도 수치에만 적합합니다.저는 단일 정밀도 수치도 지원하도록 수정하고 싶습니다.나는 numpy를 사용할 수 있다고 읽었어, 특히.numpy.float32수업. 누가 기능 수정을 도와줄 수 있나요?

주어진 부동 유형에 대해 기계 엡실론을 얻는 더 쉬운 방법은 다음을 사용하는 것입니다.

print(np.finfo(float).eps)
# 2.22044604925e-16

print(np.finfo(np.float32).eps)
# 1.19209e-07

엡실론을 얻는 또 다른 쉬운 방법은 다음과 같습니다.

In [1]: 7./3 - 4./3 -1
Out[1]: 2.220446049250313e-16

데이비드가 지적했듯이, 그것은 이미 효과가 있을 것입니다!

>>> def machineEpsilon(func=float):
...     machine_epsilon = func(1)
...     while func(1)+func(machine_epsilon) != func(1):
...         machine_epsilon_last = machine_epsilon
...         machine_epsilon = func(machine_epsilon) / func(2)
...     return machine_epsilon_last
... 
>>> machineEpsilon(float)
2.220446049250313e-16
>>> import numpy
>>> machineEpsilon(numpy.float64)
2.2204460492503131e-16
>>> machineEpsilon(numpy.float32)
1.1920929e-07

언급URL : https://stackoverflow.com/questions/19141432/python-numpy-machine-epsilon