pow函数给出不需要的结果c

时间:2015-11-24 10:26:45

标签: c

对于作业,我被要求编写一个程序来计算常规c中的几何和算术平均值。 我写了这个函数:

double Geometric_mean(int number[], int n) //number[5]={1,2,3,4,5},n=5
{
    int i;
    double mean = 1;
    for (i = 0;i < n;i++)
    {
        mean =mean*number[i];
    }
    mean = pow(mean,1/n); //mean=120
    return(mean); //mean=1
}

在pow将其变为1而不是所需的2.605

之前,我得到了所需的结果

2 个答案:

答案 0 :(得分:4)

由于1nint s,1/n是一个欧几里德分区,其0的结果为n > 1

您应该使用double部门:

#include <cstddef>
#include <cmath>

double gmean(const int data[], std::size_t datasize)
{
    double product = 1.0;
    for (std::size_t i = 0 ; i < datasize ; i++)
    {
        product *= data[i];
    }
    return std::pow(product, 1.0/datasize);
}

Live example

请注意,我在C ++中回答。 C和C ++是两种不同的语言,您应该事先选择使用哪种语言。

答案 1 :(得分:2)

你使用积分除法(均值,1 / n);如果n> 1,则1 / n的结果为零。你应该将它转换为浮动或双倍:

pow(mean,1.0/n);

pow(mean,1/(double)n);