python - Python数学问题我的结果非常接近示例但机器人相同
问题描述
根据使用下面公式输入的 x 值编写计算 y 值的程序的代码。
1
---------------
1
x + ----------
1
x + ------
1
x + ---
2
例如:
If x = 1, y = 0.6000000000000001
If x = 10 y = 0.09901951266867294
If x = 100 y = 0.009999000199950014
If x = -5 y = -0.19258202567760344
我的代码
x = float(input("x= "))
y = (1.0/(x+(1.0/(x+(1.0/(x+0.5))))))
print(y)
我的结果
x= 1 y= 0.625
x= 10 y= 0.09901914992993928
x= 100 y= 0.009999000199462694
x= -5 y= -0.19262295081967212
我不知道我哪里做错了。结果如此接近。
解决方案
那是因为不是每个数字都可以表示为浮点数。例如,十进制中的 0.2 具有有限的位数,但在二进制中则没有(如十进制中的 1/3)。要对浮点变量进行非常精确的运算,您可以使用十进制浮点,它的工作原理更像是十进制而不是二进制。
浮点错误: https ://en.wikipedia.org/wiki/Floating-point_error_mitigation
十进制浮点数: https ://en.wikipedia.org/wiki/Decimal_floating_point https://docs.python.org/2/library/decimal.html
推荐阅读
- amazon-web-services - cognito-idp admin-update-user-attributes 尝试更新自定义属性时出错
- python - 如何设置 CRON 作业限制以匹配用户?
- javascript - 如何在 ReactJS 中使用 css 调整按钮的大小
- c# - 是否可以使用 Autofac 程序集扫描为多个键注册一种类型?
- java - 如何更改二维数组中的第一行和第一列
- javascript - React-Native,将实时变量(动态数组)从一个文件传递到另一个文件
- angular - Angular 7. 第一次不要检查反应形式的验证
- r - 优化 `data.table::fread` 速度建议
- c# - 如何检查单选按钮是否已被选中,是否已为变量赋值
- python - 如何重新加载 python 包并恢复所有初始设置