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

pow函数给出了不需要的结果c,c,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

有一个作业要求我写一个程序,用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
}
双几何平均数(整数[],整数n)//数[5]={1,2,3,4,5},n=5 { int i; 双平均值=1; 对于(i=0;i
由于
1
n
都是
int
s,
1/n
是欧几里德除法,对于任何
n>1
,其结果都是
0

您应该使用
除法:

#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);
}
#包括
#包括
双gmean(常量int数据[],标准::大小\u t数据大小)
{
双积=1.0;
对于(std::size\u t i=0;i


请注意,我在C++中已经回答了。C和C++是两种独立的语言,你应该预先选择哪种语言。

< P> >代码> 1 < /代码>和<代码> N< /代码>是代码> int <代码> s,<代码> 1 /n < /代码>是欧几里得除法,其结果是<代码> 0 > /代码>任何<代码> n > 1 < /COD> < < /P> 您应该使用
除法:

#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);
}
#包括
#包括
双gmean(常量int数据[],标准::大小\u t数据大小)
{
双积=1.0;
对于(std::size\u t i=0;i


请注意,我在C++中已经回答了。C和C++是两种独立的语言,你应该预先选择哪种语言。

< P>使用整分POW(平均,1/N);如果n>1,则1/n的结果为零。应将其转换为浮点或双精度:

pow(mean,1.0/n);


使用积分除法功率(平均值,1/n);如果n>1,则1/n的结果为零。应将其转换为浮点或双精度:

pow(mean,1.0/n);


我更喜欢
1.0/n
而不是静态cast我更喜欢
1.0/n
而不是静态cast“计算规则c中的几何和算术平均值”。那么为什么你要标记C++呢?“在C中计算几何和算术平均值”。那么为什么你要标记C++?为什么不写代码> 1(/双)N< /代码>???为什么强制编译器执行另一个强制转换?当然,所有这些都是正确的,但是如果整个操作都是浮点运算,为什么还要坚持使用整数呢?如果新手从一开始就学会区分浮点文字(带显式小数点的数字)和整数文字(他们没有点),他们会得到更好的指导,为什么不
1.0/(double)n
???为什么强制编译器执行另一个强制转换?当然,所有这些都是正确的,但是如果整个操作都是浮点运算,为什么还要坚持使用整数呢?新手如果从一开始就学会区分浮点文字(带有显式小数点的数字)和整数文字(他们没有点),就会得到更好的指导