>

정수의 거듭 제곱을 계산하는 프로그램을 작성하고있었습니다. 그러나 결과는 예상과 다릅니다.5의 거듭 제곱

을 제외한 모든 정수에서 작동했습니다.

내 코드는 :

#include <stdio.h>
#include <math.h>
int main(void)
{
  int a,b;
  printf("Enter the number.");
  scanf("\n%d",&a);
  b=pow(a,2);
  printf("\n%d",b);
}

출력은 다음과 같습니다 :

"Enter the number. 2
 4
"Enter the number. 5
 24
"Enter the number. 4
 16
"Enter the number. 10
 99

pow() 를 사용할 수 없습니다  int 데이터 타입을위한 함수 ??


  • 답변 # 1

    부동 소수점 정밀도가 여기서 일하고 있습니다. pow 의 실제 작업   log 를 사용하고 있습니다    

    pow(a, 2) ==> exp(log(a) * 2)
    
    

    와이즈 비츠를보십시오  

    라는 라이브러리 위즈 위즈 와이즈 비즈

    math.h 만 추가   <math.h> 의 반환 값으로  그런 다음

    /* Excess precision when using a 64-bit mantissa for FPU math ops can cause unexpected results with some of the MSVCRT math functions. For example, unless the function return value is stored (truncating to 53-bit mantissa), calls to pow with both x and y as integral values sometimes produce a non-integral result. ... */

    로 변환하십시오. .

    0.5
    
    

    질문에 대한 답변

    와이즈 비즈 와이즈 비즈  C의 데이터 유형?

    항상 그런 것은 아닙니다. 정수 지수의 경우 자신의 함수를 구현할 수 있습니다 (0 및 + ve pow 에서 작동합니다)  ) :

    int
    
    

  • 답변 # 2

    int 기반의 pow는 없습니다. 당신이 겪고있는 것은 부동 소수점 잘림입니다.

    int 기반의 pow가 너무 제한되어 있습니다 (입력 범위가 int를 빠르게 오버플로합니다). 대부분의 경우 2의 거듭 제곱을 다른 방법으로 효율적으로 수행 할 수있는 경우와 같이 int 기반의 pow입니다.

  • 답변 # 3

    b = (int)(pow(a,2) + 0.5);  그리고 당신이 무엇을 얻을 참조하십시오;나는 당신이quite을 얻지 못한다는 것을 알게 될 것으로 기대합니다.

    Does pow() work for 에 전화하십시오  잘리지 않고 반올림하려는 경우

  • 답변 # 4

    C 라이브러리 함수 double pow (double x, double y)

    더블 타입이 필요합니다

    int

관련 자료

  • 이전 c++17 - C ++ 이름 확인 문제
  • 다음 NiFi - 니파이 - sqoop을 능가하는 querydatabasetable 성능 향상