【问题标题】:How to handle big floats in Python 3 (recurrent function)?如何处理 Python 3 中的大浮点数(循环函数)?
【发布时间】:2019-11-21 09:11:39
【问题描述】:

我对 Python 中的浮点数太大有一个小问题。发生溢出错误。

函数如下所示:

N(t + 1) = (1 + c) N(t) - (c / d) * N(t)**2 其中 t 是时间,c 和 d 是常数。

我需要它来计算最多一分钟 (t = 60)。但是在 t= 8、9 或 10 之后,我得到了溢出错误。

def nValue(t):
    n_calc = []
    c = 2.3 # 0..3
    d = 95  # 1..250
    n_0 = 450 # 0..600
    n_1 = (1 + c) * n_0 - c / d * n_0**2
    n_calc.append(n_0)
    n_calc.append(n_1)
    for i in range(2, t+1):
        n_curr = (1 + c) * n_calc[i- 1] - (c / d) * (n_calc[i- 1]**2)
        n_calc.append(n_curr)

    return n_calc

我应该使用 Decimal 类型、BigFloat 还是其他类型?

最后我要画图...(2D Matplotlib 图)。也许我应该以某种方式“缩放”这个等式?

【问题讨论】:

    标签: python overflow


    【解决方案1】:

    您可以使用这个先前的答案作为参考。 OverflowError: (34, 'Result too large') 十进制类没有限制,所以你应该使用 use。它与 GMP 和其他任意精度库的用途相同。

    我希望这对你有帮助。 https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software

    【讨论】:

    • 这很有帮助,但在某些时候我得到了小数溢出。即使以精度为代价,如何使小数足够大?还有一个问题:如何正确使用电源,我应该在方程式中使用 pow()、**2 还是 Context.power()?
    • 在某些常量值上,我收到 "decimal.Overflow: []" 警告。
    • 现在我看到了,你的程序超过了最大浮点精度,大约是 1e308
    • 我建议您以某种方式扩展,因为它呈指数增长。取决于你想如何处理这个问题。我找到了 mpmath,我找不到哪些文档,因为该站点处于脱机状态,但似乎非常适合此目的检查此stackoverflow.com/questions/11522933/…
    • 我会试试这个库(mpmath),文档在这里工作。它与matplotlib合作吗?我需要为 0 到 60 的 t 绘制函数 N(t)。我在我的应用程序中使用 matplotlib 绘图。
    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 2011-11-14
    • 2021-09-17
    • 2019-03-26
    • 2021-02-27
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多