python用递归函数和正常输出相比,少了一位小数
def chengjie1(n):
sum=0;
if n==1:
sum=sum+(1/ (n * (n + 1)))
returnsum
else:
sum=(1/ (n * (n + 1))+chengjie1(n-1))
return sum
print(chengjie1(12))
print(12/13)
结果如下:
0.923076923076923 这个是递归的。
0.9230769230769231这个是正常输出的。
这个是什么问题,
输出print(chengjie1(14))
print(14/15)
结果如下0.9333333333333332用递归
0.9333333333333333没用递归 这个仅仅是运算精度问题。15位有效数字 sunrise085 发表于 2020-4-26 17:18
这个仅仅是运算精度问题。15位有效数字
这个能解决吗? 运算精度的问题,可以忽略 sunrise085 发表于 2020-4-26 17:18
这个仅仅是运算精度问题。15位有效数字
while循环和递归函数的精度是不是一样的 除不尽的数你没有考虑进去吧。
无理数和无限循环小数。 zltzlt 发表于 2020-4-26 17:20
运算精度的问题,可以忽略
0.9899999999999997 这个是递归
0.99 这个是while循环的
他们精度不一样的吗? zltzlt 发表于 2020-4-26 17:20
运算精度的问题,可以忽略
主要是递归函数那个值越大,离标准答案的值就越不准确,这个不能解决吗? Otteel 发表于 2020-4-26 17:20
这个能解决吗?
解决不了,这是计算机存储问题
计算机是以二进制进行存储的,数据存储过程中基本都有精度损失。有效位数是15位,之后的就不精确了。
只有少数是没有精度损失的,例如0.5,0.125,0.625等能够用2完整分割的小数一般是没有精度损失的 Otteel 发表于 2020-4-26 17:24
0.9899999999999997 这个是递归
0.99 这个是while循环的
他们精度不一样的吗?
这是编程语言共存的问题 sunrise085 发表于 2020-4-26 17:25
解决不了,这是计算机存储问题
计算机是以二进制进行存储的,数据存储过程中基本都有精度损失。有效位数 ...
为什么循环是16位,而递归是15位呢?
页:
[1]