gpt4 book ai didi

c - 在 C 中使用梯形法则对某些值给出错误答案的积分

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:33 24 4
gpt4 key购买 nike

我已经编写了一些代码来集成函数 5x^4 + 4x^3 + 3x^2 + 2x + 1。

#include<stdio.h>
#include<math.h>

float func(float x){
float a;
a = 5*pow(x,4) + 4*pow(x,3) + 3*pow(x,2) + 2*x +1;
return a;
}

int main(){
float numberOfXValues;
float a = 0; //lower limit
float b = 1; //upper limit
float numberOfStrips;
float stripSize;
float finalAnswer;
float sumFirstAndLast; //summation of first and last x value

while(1){
printf("Input number of X values:");
scanf("%f", &numberOfXValues);

numberOfStrips = numberOfXValues - 1;
stripSize = (b - a)/(numberOfStrips);
sumFirstAndLast = 0.5*func(a) + 0.5*func(b);

for (float z = stripSize; z < b; z += stripSize ){
sumFirstAndLast += func(z);
}

finalAnswer = sumFirstAndLast * stripSize;

printf("%f\n", finalAnswer);
}
return 0;
}

它适用于大多数值,但 13 和 20 的输出给出了错误的答案。我已经仔细查看了几次,但看不出是什么原因造成的。

输入 X 值的数量:10
5.039070
输入 X 值的数量:11
5.031651
输入 X 值的数量:12
5.026160
输入 X 值的数量:13
6.271982
输入 X 值的数量:14
5.018732
输入 X 值的数量:15
5.016153
输入 X 值个数:16
5.014071
输入 X 值个数:17
5.012367
输入 X 值个数:18
5.010955
输入 X 值的数量:19
5.009773
输入 X 值的数量:20
5.798243
输入 X 值的数量:21
5.007917

最佳答案

问题是在内循环的退出条件下,你比较了两个 float 。在numberOfStrips之后迭代,不能保证 z == b因为浮点精度。 z < b 完全有可能或 z > b .在z < b情况下,它再次执行循环。

你应该制作numberOfStrips一个整数并像这样重写循环:

float z = stripSize;
for (int i = 1; i < numberOfStrips; i++) {
sumFirstAndLast += func(z);
z += stripSize;
}

关于c - 在 C 中使用梯形法则对某些值给出错误答案的积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703463/

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