Python: OverflowError: fout in wiskundebereik

Ik krijg een overloopfout wanneer ik deze berekening probeer, maar ik kan niet achterhalen waarom.

1-math.exp(-4*1000000*-0.0641515994108)

Antwoord 1, autoriteit 100%

Het getal dat u math.exp laat berekenen, heeft, in decimalen, meer dan 110.000 cijfers. Dat is iets buiten het bereik van een double, dus het veroorzaakt een overflow.


Antwoord 2, autoriteit 71%

Gebruik om het te repareren:

try:
    ans = math.exp(200000)
except OverflowError:
    ans = float('inf')

Antwoord 3, autoriteit 15%

Ik denk dat de waarde te groot wordt om in een doublein python te passen, daarom krijg je de OverflowError. De grootste waarde die ik de expvan op mijn machine in Python kan berekenen, is net iets groter dan 709.78271.


Antwoord 4, autoriteit 9%

Dit geeft je misschien een idee waarom:

http://www.wolframalpha.com/input/?i=math.exp%28-4*1000000*-0.0641515994108%29

Let op de 111442 exponent.


Antwoord 5, autoriteit 6%

Helaas heeft niemand uitgelegd wat de echte oplossing was. Ik heb het probleem opgelost met:

van mpmath import *

U kunt de documentatie hieronder vinden:

http://mpmath.org/


Antwoord 6, autoriteit 3%

Probeer np.exp() in plaats van math.exp()

Numpy behandelt overflows eleganter, np.exp(999) resulteert in inf
en 1. / (1. + np.exp(999)) resulteert daarom gewoon in nul

import math 
import numpy as np
print(1-np.exp(-4*1000000*-0.0641515994108))

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes