Pow(1,0) возвращает 0?

Почему это:

printf("%d\n", pow(1,0)); /* outputs 0 */

возвращается 0? Я ожидал, что это вернется 1,

2 ответа

Решение

pow() возвращает double тип. Вам нужно использовать %f спецификатор формата для печати double,

Использование неподходящего спецификатора формата для предоставленного типа аргумента приводит к неопределенному поведению. Проверьте главу §7.21.6.1 стандарта C N1570 (C11). (Да, это не имеет ничего общего с C89, ПО МОЕМУ МНЕНИЮ)

Вам нужно набрать приведение результата к int, поскольку pow() возвращает double.

printf("%d\n",(int) pow(1,0));

Это даст желаемый результат 1

нота:pow(a,b) дает правильный результат, когда и А и В integers как в вашем случае. Но вам нужно add 0.5 к результату при работе с fractions так что результат округляется до ближайшего целого числа.

printf("%d\n",(int) (pow(2.1,0.9)))// will return 1. 

printf("%d\n",(int) (pow(2.1,0.9)+0.5));//will return 2.

Надеюсь, это поможет вам.

Другие вопросы по тегам