【问题标题】:Long int too large to convert to floatLong int 太大而无法转换为浮点数
【发布时间】:2012-11-09 21:08:23
【问题描述】:

假设我有一个具有该功能的程序

def fakultaet(x):
    if x>1:
        return(x* fakultaet(x-1)) 
    else:
        return(1)

返回给定数字的阶乘,我需要计算

1.0/fakultaet(200)

但出现溢出错误:long int too large to convert to float

我该如何解决这个问题?

【问题讨论】:

  • 风格注释:return 是一个语句,而不是一个函数,因此您通常不会在返回的对象周围写上括号。你会写 return x * fakultaet(x-1)return 1 代替。例如,请参阅 Python 文档中的一个随机示例:docs.python.org/dev/tutorial/…

标签: python casting


【解决方案1】:

你可以试试这个:

from decimal import Decimal

def fakultaet(x):  # as you have it currently
    if x>1:
        return(x * fakultaet(x-1)) 
    else:
        return(1)

print Decimal(1.0) / fakultaet(200)

输出:

1.267976953480962421753016371E-375

哦,另外,math 模块中已经有一个factorial 函数,只需在文件顶部包含from math import factorial 即可访问它。

【讨论】:

  • 这是一个小得离谱的数字,因为 200!是一个大得离谱的数字。 :)
  • @hobbs 没错,这就是为什么你需要明确地使用Decimal 类(你不能只用floats 来解决它)。
  • 确实,如果 OP 能够使用浮点数,他可能最终还是会得到 0。
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多