Почему Python конвертировать в 0.0 молча?

голоса
2

Обратите внимание , в коде ниже , что выход внезапно становится 0.0для 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

Я ожидал увидеть Underflowошибку или какое - то предупреждение , что это произойдет.

Я кодирования фильтр спама с помощью наивного алгоритма Байеса, и вычисления , как вы видите выше , являются общими для длительных сообщений. Несмотря на то, что я могу добавить некоторые математические методы обхода, я до сих пор считаю , что это проблематично , что это «превращение» в 0.0происходит беззвучно.

Я побежал код, указанный выше в Pyhton 3.7.3.

Задан 09/10/2019 в 12:55
источник пользователем
На других языках...                            


1 ответов

голоса
1

В Python, все точки округление плавающей делается тихо, так получилось, что в этом случае ближе число с плавающей точкой вы пытаетесь представить ближе к 0, чем наименьшее число с плавающей точкой> 0.

Поскольку некоторые из комментариев предложили, используя пространство журнала поможет вам с обработкой представления этих очень небольших количеств.

Ответил 09/10/2019 в 13:25
источник пользователем

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