如何解决错误是精确产生的,我该如何摆脱呢?
使用小数位时答案出错!
我正在运行以下程序:
#include<stdio.h>
#include<math.h>
main()
{
float x,y,div;
printf("Enter two numbers x,y \n");
scanf("%f%f",&x,&y);
div=x/y;
printf("div=%12.10f\n",div;
return 0;
}
运行后,当我输入x = 1和y = 3时,答案为0.3333333433,但答案应为0.3333333333。为什么会出现此错误?如何摆脱这种错误?请帮忙。
解决方法
float
不能精确表示每个实数,只能表示其中的2 32 个。 1.0f / 3.0f不会保存为0.3333333333,而是会保存附近的值:0.3333333432432674407958984375-a https://bugs.python.org/issue35083。
在.
之后打印到小数点后10位是0.3333333433。
如何摆脱这种错误?
在此示例中,使用诸如double
之类的精度更高的类型。更高精度的输出"%22.20f"
仍然会出现类似的问题。
...或者改为更改您对使用二进制浮点数形成十进制答案的期望。
....等待dyadic rational的下一版本,该版本可能具有十进制浮点数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。