【问题标题】:Measuration By Division [closed]按部门测量[关闭]
【发布时间】:2013-05-05 17:05:39
【问题描述】:

函数是y=x^2+2x+1,域是从0到10。如果你输入区间数,你的程序会打印结果。完成功能,MeasurationByDivision()

我做了下面的 C 代码,但我得到了非常错误的结果.. 我想我错过了一些错误..

应该是这样的结果:

10  
505.000000  
35  
460.612245

我的代码:

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

void MeasurationByDivision( double* result, int intervals );
float f(float t) { return( pow(t,3) + 2 ); } 

int main(void) { 
    int intervals ;
    double result=0;
    scanf("%d", &intervals ) ;
    MeasurationByDivision(&result, intervals ) ;
    printf( "%lf\n", result ) ; 

    fflush(stdin);
    getchar();
}

void MeasurationByDivision(double* result, int intervals)
{


    int i,a=0;
    double x = 10/(double)intervals;
    float y[100];

for(i=1; i<=intervals; i++) {

    y[i]=a+i*x;
    *result += x*f(y[i]);

} 
} 

这段代码结果是:

10   
3045.000000 

【问题讨论】:

    标签: c++ c function math


    【解决方案1】:

    函数是y=x^2+2x+1

    那么为什么你的函数是这个?

    float f(float t) { return( pow(t,3) + 2 ); }
    

    改变它以匹配给定的功能,你应该得到预期的结果。

    我还想摆脱 100 元素的数组:你根本不需要数组,如果你尝试超过 100 个间隔,事情会变得非常糟糕。

    【讨论】:

    • 谢谢你......我应该尽快摆脱 100 数组..xD.. 我刚刚将代码编辑为 float f(float t) { return((t + 1)*(t + 1));但我没有得到预期的结果:不是 35 460.612245 而是 35 460.612239...应该是 460.612245..为什么我会得到这个结果?
    • 那是因为float 不能准确地表示所有数字。你会得到最接近的可以表示的值。
    • 它是正确的..谢谢你!!! :)
    【解决方案2】:
    float f(float t) { return( pow(t,3) + 2 ); } 
    

    float f(float t) { return((t + 1)*(t + 1) ); } 
    

    添加到应该是460.612245..为什么会得到这个结果?

    使用

    double f(double t) { return((t + 1)*(t + 1) ); } 
    ...
    double y[100];
    

    【讨论】:

    • 哇谢谢你!我将代码编辑为 float f(float t) { return((t + 1)*(t + 1) );但我没有得到预期的结果:不是 35 460.612245 而是 35 460.612239...应该是 460.612245..为什么我会得到这个结果?
    • @anna 我想可能是因为float的精度不够吧。
    • 是的,我将浮点数更改为双倍,我得到了预期的结果。感谢你! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2023-03-04
    • 2012-08-11
    相关资源
    最近更新 更多