c - 为什么 C 上的 Power int 不正确?

标签 c math pow

大家好,我正在用 C99 做我的家庭作业基本内容,但是有一些事情让我不安,请在回答之前尝试我的代码。 问题是,当我尝试数字 5、10、15 时,答案不正确,它始终是正确的值 - 1。

有人可以解释一下这是为什么吗?

#include <stdio.h>
#include <math.h>

int main() {
    int P, x;

    printf("Calculons le polynome P(x)\n");

    printf("Entrer la valeur de x :");

    scanf("%d", &x);

    P = pow(x,2);

    printf("%d", P);

    return 0;
}

最佳答案

math.h 中函数 pow 的签名为

double pow(double x, double y);

由于您传递了两个整数并将结果分配给一个整数,我的猜测是,由于舍入错误和小数部分的截断,您会得到错误的结果(如果您将 24.999999 分配给整数变量,您将得到 24)。此外,您还需要始终检查 scanf 的返回值。而且输出需要以换行符结束,否则结果可能无法显示。

这是更正后的版本:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double P, x;
    int n;

    printf("Calculons le polynome P(x)\n");
    printf("Entrer la valeur de x: ");
    n = scanf("%lf", &x);
    if (n == 1) {
        P = pow(x, 2.0);
        printf("%.2f\n", P);
    } else {
        fprintf(stderr, "Entrée invalide\n");
        exit(EXIT_FAILURE);
    }
    return 0;
}

关于c - 为什么 C 上的 Power int 不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44266715/

相关文章:

c++ - 为什么使用两个 pow() 内部计算的 sqrt() 在智能感知中是错误的

c - 为什么这个 printf 语句或缺少该语句会改变 for 循环的效果?

c - mingw const char 字符串显然不是 const

arrays - 如何在恒定时间内找到相关线性方程组的解?

algorithm - 我如何找到大 C(n , r) 的模数

python : overflow error long int too large to convert to float

C 变量显示不同的不同值

c - 回文程序

python - 找到python中分数列表的最小公分母

c++ - SSE 类型的 pow