gpt4 book ai didi

c++ - 二分法程序错误答案(C++)

转载 作者:行者123 更新时间:2023-11-30 05:18:48 26 4
gpt4 key购买 nike

我正在解决典型的二分法任务,但具有固定容差 (1e-20)、固定间隔 (0, 10) 和给定函数:x ^5 - a*x - 84422%100,用户输入 a 作为参数。

对于 a = 5 的示例,我应该得到答案 2.3227751229355622988, float 后精度为 20 位,但我得到 2.50000000000000000000。我哪里错了这是我的代码:

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

const double e = 1e-20;
const int fn = 84422;

double f(int a, int x)
{
double y = x * x * x * x * x - a * x - fn % 100;
return (double)y;
}

int main()
{
double lv, rv, midv, mid, root, tol;

int left = 0;
int right = 10;
int a;
cin >> a;

do
{
mid = (left + right) / 2.0;
rv = f(a, right);
lv = f(a, left);
midv = f(a, mid);

if(midv == 0)
{
root = mid;
break;
}

if(midv * lv < 0)
{
right = mid;
}
else
left = mid;
} while ((right - left) > e);

root = (left + right) / 2.0;
cout << " The Root is approximately: ";
cout << fixed << setprecision(20) << root << endl;

cin.get();
cin.get();
return 0;
}

最佳答案

您的leftright 是整数。

当您将 mid 分配给它们时,您会丢失有效数字(实际上所有数字都是有效数字)。

将它们更改为 double

关于c++ - 二分法程序错误答案(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com