【发布时间】:2020-02-20 16:06:35
【问题描述】:
我试图将一个数字除以一个很小的数字。 “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
【问题讨论】:
-
我不确定你在期待什么。如果你除以一个非常小的数字,你会得到一个非常大的数字,直到一个点。对于 64 位,限制在
1e-323和1e+308附近。如果您需要1e300“尝试”(intentos)或1e500,这真的很重要吗?从功能上讲,此时概率为零,因此不妨进行无限尝试。只需将pexito == 0.0作为特例处理即可。