Почему Power int на C неверен?

Здравствуйте, ребята, я делал свою домашнюю работу в 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;
}

2 ответа

Сигнатура функции pow в math.h является

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;
}

Я не хочу использовать х * х, я просто упростил уравнение, уравнение немного сложнее, чем х ^2, кроме того, я хотел бы понять, почему

Дело в том, что если я просто поставлю Pow(5,2), он работает отлично, и у меня есть 25

Просто когда я даю значение x a, такое как 5, 10 или 15, я получаю правильное значение минус один.

Я пытался объявить P двойным, и он тоже работает. У меня есть 25,00000. Спасибо Августу Карлстрому за ваше решение, дело в том, что я все еще задаюсь вопросом, почему это работает, если я просто поставлю Pow(5,2)

здесь код с использованием двойного и он работает

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

int main() {
    double P;
    int x;

    printf("Calculons le polynome P(x)\n");    
    printf("Entrer la valeur de x :");    
    scanf("%d", &x);

    P = pow(x,2);

    printf("%f", P);    
    return 0;
}
Другие вопросы по тегам