浮点数除以零 Python

新手上路,请多包涵

我正在尝试将一个数字除以另一个很小的数字。 “q”始终是一个介于 0 和 1 之间的浮点数,当 n 超过 1000 时,输出表示“浮点除以零”,因为它将小数字四舍五入为零。我已经尝试使用 Decimal 但仍然无法正常工作

#Librerías
import numpy as np
import matplotlib.pyplot as plt
from decimal import Decimal

#Datos
p = float(input("Introduzca probabilidad de error de bit: "))
while p < 0 or p > 1:
    p = float(input("Introduzca probabilidad de error de bit: "))
n = int(input("Introduzca número de bits: "))
while n < 0:
    n = int(input("Introduzca número de bits: "))

#Cálculos
q = 1-p
pexito = (q**n)
intentos = 1/pexito
print()
print("El número medio de intentos es:",intentos)
print()
print("La probabilidad de transmitir correctamente",n,"bits es:",pexito)

ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-10-606e023fc7ec> in <module>
     15 q = 1-p
     16 pexito = (q**n)
---> 17 intentos = 1/pexito
     18 print()
     19 print("El número medio de intentos es:",intentos)

ZeroDivisionError: float division by zero

原文由 Juan Antonio Ramírez Peña 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 560
2 个回答

尝试提高 精度

 from decimal import Decimal, getcontext

getcontext().prec = 2*n

a = Decimal(a)
b = Decimal(b)
c = a/b

原文由 Artur Kasza 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用标准库中的 Fraction 类对分数进行精确算术运算:

 >>> from fractions import Fraction
>>> n = 2000
>>> p = Fraction(1, 2)
>>> result = p ** n
>>> 1 / result
Fraction(114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681344168908984458505602379484807914058900934776500429002716706625830522008132236281291761267883317206598995396418127021779858404042159853183251540889433902091920554957783589672039160081957216630582755380425583726015528348786419432054508915275783882625175435528800822842770817965453762184851149029376, 1)

The Fraction constructor also accepts a string in decimal format like '0.5' or an exact fraction like '1/2' , so you can do p = Fraction(input(...)) instead of float(input(...))

请注意,如果结果 实际上 为零(这发生在 p 本身为零时),这仍然会给您 ZeroDivisionError

原文由 kaya3 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题