结果是不同的,因为浮点类型的精度有限,并且由于减法运算符强制它的操作数是相同类型。 gamma
函数返回一个浮点数,所以它不能为这个数字返回一个精确的答案。 This page给出了一个很好的问题描述。
gamma(101)-fac(100)
fac(100)
项在减法运算之前转换为浮点数。
>>> gamma(101)
9.332621544394415e+157
>>> float(fac(100))
9.332621544394415e+157
的fac(100)
(最显著)的一部分,适合在一个浮动匹配的gamma(101)
,所以在0.0
减法结果。
对于你的第二个测试,gamma(101)
没有小数部分,从而math.floor
没有影响:
>>> math.floor(gamma(101)) == gamma(101)
True
当您转换gamma(101)
为长,你可以清楚地看到,这是不准确的:
>>> long(gamma(101))
933262154439441509656467047959538825784009703731840988
310128895405822272385704312950661130892883272778258496
64006524270554535976289719382852181865895959724032L
>>> fac(100)
933262154439441526816992388562667004907159682643816214
685929638952175999932299156089414639761565182862536979
20827223758251185210916864000000000000000000000000L
奇怪的不一致尽管使用了'math.floor',理论上它应该和第三个一样。 – rfw
@rfw:'math.floor()'返回一个'float';对于已经存储为浮点数的整数值,它是无操作的。 – geoffspear
奇怪的是,在Python 3中它返回'int'和'math.gamma'在Python 2中不存在。 – rfw