Hvorfor Python konvertere til 0,0 stille?

stemmer
2

Legg merke i koden under at produksjonen plutselig blir 0.0for 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

Jeg hadde forventet å se en Underflowfeil eller en slags advarsel om at dette skjer.

Jeg koding et spamfilter hjelp av Naive Bayes algoritmen, og beregninger som du ser ovenfor er felles for lange meldinger. Selv om jeg kan legge til noen matematiske løsninger, tror jeg fortsatt det er problematisk at denne konvertering til 0.0skjer lydløst.

Jeg løp inn koden ovenfor i Pyhton 3.7.3.

Publisert på 09/10/2019 klokken 12:55
kilden bruker
På andre språk...                            


1 svar

stemmer
1

I Python, er alle flyttall avrunding gjort stille, det bare skjer i dette tilfellet at det nærmeste desimaltall du prøver å representere er nærmere 0 enn den minste flyttall tall> 0.

Som noen av kommentarene har foreslått, vil bruke loggplass hjelpe deg med å håndtere representasjon av disse svært små tall.

Svarte 09/10/2019 kl. 13:25
kilden bruker

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