Waarom heeft Python te zetten naar 0,0 in stilte?

stemmen
2

Merken in de onderstaande code dat de uitgang plots 0.0voor 0.0005**99.

In [1]: 0.0005**97                                                              
Out[1]: 6.31e-321

In [2]: 0.0005**98                                                              
Out[2]: 5e-324

In [3]: 0.0005**99                                                              
Out[3]: 0.0

In [4]: 0.0005**100                                                             
Out[4]: 0.0

Ik verwachtte een zien Underflowfout of een soort van een waarschuwing dat dit gebeurt.

Ik ben het coderen van een spamfilter met de Naive Bayes algoritme, en berekeningen zoals u hierboven ziet komen vaak voor lange berichten. Hoewel ik een aantal wiskundige workarounds kan toevoegen, ik denk nog steeds dat het problematisch dat deze bekering tot 0.0gebeurt in stilte.

Ik rende boven de code in Pyhton 3.7.3.

De vraag is gesteld op 09/10/2019 om 12:55
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

In Python wordt alle floating point afronding stilte gedaan, het is gewoon zo gebeurt dat in dit geval het dichtstbijzijnde floating point getal dat je probeert te vertegenwoordigen dichter bij 0 dan de kleinste floating point getal> 0.

Als enkele van de opmerkingen hebben voorgesteld, met behulp van log ruimte zal u helpen met de behandeling van de voorstelling van deze zeer kleine aantallen.

antwoordde op 09/10/2019 om 13:25
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more