墨咚 2020-09-15 17:27 采纳率: 0%
浏览 102

计算机二级题为什么float和double定义会有答案误差

利用迭代法求 cos(x)-x=0的一个实根 (当x0-x1的绝对值小于0.000001时)
认为x1是方程的根

迭代步骤如下:(1)取x1初值为0.0; (2)x0=x1,把x1的值赋给x0;

(3)x1=cos(x0),求出一个新的x1;

(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);

(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。

程序将输出root=0.739085

float x1=0.0, x0;
do
{
x0=x1;
x1=cos(x0);
}while(fabs(x0-x1)>=1e-6);
return x1;

为什么 x1类型为 float 或者 double
float 定义答案为 0.739085
double 定义答案为 0.739086
算出来的答案 会有 0.000001的误差
导致答案错误

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-15 17:36
    关注

    这个不同的计算机,不同的编译器,结果都可能不同。
    不同的编译器,会导致四则运算的顺序不确定,使用的指令的精度不同(fpu精度高,sse精度低)

    评论

报告相同问题?

悬赏问题

  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓