对于作业,我被要求编写一个程序来计算常规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
之前,我得到了所需的结果答案 0 :(得分:4)
由于1
和n
是int
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);
}
请注意,我在C ++中回答。 C和C ++是两种不同的语言,您应该事先选择使用哪种语言。
答案 1 :(得分:2)
你使用积分除法(均值,1 / n);如果n> 1,则1 / n的结果为零。你应该将它转换为浮动或双倍:
pow(mean,1.0/n);
或
pow(mean,1/(double)n);