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.
Надеюсь, это поможет вам.