没有点的 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/31/3.的结果差别很大。

第一种使用整数除法。商为 0,余数为 1,被舍弃(或截断),导致最终值为 0

第二个使用浮点除法得到预期值,(大约)0.333...