pow函数给出了不需要的结果c
有一个作业要求我写一个程序,用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
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
???为什么强制编译器执行另一个强制转换?当然,所有这些都是正确的,但是如果整个操作都是浮点运算,为什么还要坚持使用整数呢?新手如果从一开始就学会区分浮点文字(带有显式小数点的数字)和整数文字(他们没有点),就会得到更好的指导