没有点的 pow 值是错误的
pow value is wrong without a dot
我有这个计算几何平均数的程序,我知道它可以用 cbrt 而不是 pow 来完成,但我的问题是下一个
//medida geometrica de 3 numeros
#include<stdio.h>
#include<math.h>
int main(){
double n1, n2, n3, mult, media;
printf("introduce los 3 numeros espaciados con un espacio cada uno:");
scanf("%lf %lf %lf", &n1, &n2, &n3);
mult = n1 * n2 * n3;
media = pow(mult, 1/3.);
printf("\nLa media geometrica es de:%lf", media);
}
问题是如果我不在 pow 函数中的 3 后面写一个点,为什么 pow 会给我一个错误的值
pow(mult, 1/3.)
我的意思是如果我写 pow(mult, 1/3) 3 后没有点,它会给我一个错误的值,我不知道为什么
提前致谢。
当您执行 1/3
时,两个参数都是整数类型,因此结果也是整数,您得到 0。
当您执行 1/3.
时,一个参数的类型为 double
,因此另一个参数将转换为该类型并完成浮点除法,因此您最终得到预期值。
1/3
和1/3.
的结果差别很大。
第一种使用整数除法。商为 0
,余数为 1
,被舍弃(或截断),导致最终值为 0
。
第二个使用浮点除法得到预期值,(大约)0.333...
。
我有这个计算几何平均数的程序,我知道它可以用 cbrt 而不是 pow 来完成,但我的问题是下一个
//medida geometrica de 3 numeros
#include<stdio.h>
#include<math.h>
int main(){
double n1, n2, n3, mult, media;
printf("introduce los 3 numeros espaciados con un espacio cada uno:");
scanf("%lf %lf %lf", &n1, &n2, &n3);
mult = n1 * n2 * n3;
media = pow(mult, 1/3.);
printf("\nLa media geometrica es de:%lf", media);
}
问题是如果我不在 pow 函数中的 3 后面写一个点,为什么 pow 会给我一个错误的值 pow(mult, 1/3.)
我的意思是如果我写 pow(mult, 1/3) 3 后没有点,它会给我一个错误的值,我不知道为什么
提前致谢。
当您执行 1/3
时,两个参数都是整数类型,因此结果也是整数,您得到 0。
当您执行 1/3.
时,一个参数的类型为 double
,因此另一个参数将转换为该类型并完成浮点除法,因此您最终得到预期值。
1/3
和1/3.
的结果差别很大。
第一种使用整数除法。商为 0
,余数为 1
,被舍弃(或截断),导致最终值为 0
。
第二个使用浮点除法得到预期值,(大约)0.333...
。