Почему это:pow (1,0) возвращает 0?
printf("%d\n", pow(1,0)); /* outputs 0 */
возвращается 0
? Я ожидал, что он вернется 1
.
Почему это:pow (1,0) возвращает 0?
printf("%d\n", pow(1,0)); /* outputs 0 */
возвращается 0
? Я ожидал, что он вернется 1
.
pow()
возвращает double
тип. Вам нужно использовать спецификатор формата %f
для печати double
.
Использование спецификатора несоответствующего формата для заданного типа аргумента вызывает undefined behaviour. Проверьте главу §7.21.6.1 стандарта C N1570 (C11
). (Да, это не имеет особого значения для C89
, IMHO)
Вам нужно набрать результат для int, поскольку pow() возвращает double.
printf("%d\n",(int) pow(1,0));
Это даст желаемый выход 1
Примечание: pow(a,b)
дает правильный результат, когда и и Ь integers
, как в вашем case.But вам нужно 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.
Надеюсь, это поможет вам.
Я считаю, что здесь нет ничего конкретного для C89. –