C의 무한대

Abdul Mateen 2023년10월12일
  1. 무한대란 무엇인가
  2. C에서 무한대 표현
  3. C의 음의 무한대
C의 무한대

이 자습서에서는 C의 무한대에 대해 설명합니다. 일반적인 무한대에 대한 설명부터 시작하겠습니다.

다음으로 C의 런타임 오류인 무한대에 대해 논의하고 C에서 무한대 저장 및 사용에 대한 논의로 결론을 내립니다.

무한대란 무엇인가

우리 모두는 초등학교에서 수직선을 알고 있습니다. 이 수직선은 끝이나 시작이 없는 화살표로 표시됩니다.

그러나 이론적으로는 둘 다 있습니다. 숫자는 양의 무한대 (때때로 +∞로 표시됨)에서 끝나고 음의 무한대 -∞에서 시작합니다.

모든 실수 x– ∞ < x < ∞ 사이에 있습니다. 무한대는 무게가 설명 가능한 한계를 넘는 숫자를 나타냅니다.

우리가 무한한 수를 가지고 있다고 말할 때, 이것은 우리가 끝이 없는 수를 가지고 있다는 것을 의미합니다.

우리 모두는 우리가 사물을 나눌 때 실제 사물의 조각이나 부분을 얻는다는 것을 알고 있습니다. 칸막이가 작을수록 더 많은 조각이 있습니다.

더 많은 조각을 얻으려면 더 작은 조각으로 나누어야 합니다. 따라서 0에 가까운 것을 나누면 무한한 조각(셀 수 없는 조각)이 됩니다.

반대로 실수를 무한대로 나누면 제한된 양을 무한대로 분배하는 것과 같기 때문에 결과는 0이 됩니다. 따라서 각 조각은 거의 0 공유를 얻습니다.

프로그래밍의 무한대

일반적으로 프로그래머에게는 무한대에 대한 일반적인 문제가 있습니다. 식에서 구분자가 0(일반적으로 실수)일 때마다 프로그램이 충돌합니다(비정상 종료).

비정상적인 종료는 생명에 중요한 소프트웨어에 심각한 문제가 될 수 있습니다. 프로그래머는 비정상적인 종료를 원하지 않습니다. 따라서 if-else 검사가 사용되거나 예외 처리가 수행됩니다.

간단한 코드를 고려하십시오.

#include <stdio.h>
int main() {
  printf("%d\n", 5 / 0);
  printf("\nEnd of program\n");
  return 0;
}

이 프로그램에서 우리는 하드코딩된 50을 사용하여 프로그램의 동작을 확인합니다. 그러나 프로그래머가 값이 어떻게든 0이 되는 변수를 구분자로 사용하는 경우가 있을 수 있습니다. 우리는 Programiz C 온라인 컴파일러에서 그것을 시도했고 출력은 아래와 같습니다.

Floating point exception

다른 온라인 컴파일러에서 동일한 코드를 시도했으며 출력은 아래와 같습니다.

main.c: In function ‘main’:
main.c:3:23: warning: division by zero [-Wdiv-by-zero]
    3 |     printf ("%d\n", 5 / 0);
      |                       ^

이 프로그램은 첫 번째 print 문에서 종료(충돌)됩니다. 프로그램이 이미 종료되었기 때문에 실행되지 않는 또 다른 print 문이 있습니다(비정상 종료라고 함).

C에서 무한대 표현

C에서 무한대는 INF 또는 inf로 표시됩니다. 일반적으로 0 또는 null 값으로 나누기 결과입니다.

이 예제 코드를 참조하십시오.

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

double divide(double d1, double d2) { return d1 / d2; }

int main() {
  printf("Result: %lf\n", divide(2, 3));
  printf("Result: %lf\n", divide(2, 0));
  return 0;
}

코드에는 두 개의 print 문이 있습니다. 첫 번째 print 문에서 0이 아닌 매개변수로 함수를 호출하는 반면 두 번째 print 호출에서는 두 번째 매개변수가 0입니다.

출력:

Result: 0.666667
Result: inf

상황은 첫 번째 코드와 유사하게 보일 수 있습니다. 그러나 약간 다릅니다. 첫 번째 코드에서 print 문 내에 표현식(0으로 나눈 값)이 있고 그 결과 프로그램이 비정상적으로 종료됩니다.

그러나 이 두 번째 프로그램은 main() 함수에서 divide 함수를 호출합니다. divide 함수는 그에 따라 인쇄하는 main 함수의 호출 결과로 inf를 반환합니다.

main 함수의 일부 변수에 결과를 저장하면 동일한 결과를 얻을 수 있습니다.

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

double divide(double d1, double d2) { return d1 / d2; }
int main() {
  double result = divide(2, 0);
  printf("Result: %lf\n", result);
  return 0;
}

결과로 inf를 얻는 것 외에도 결과를 무한대와 비교할 수 있습니다. 우리의 다음 지침은 식의 값을 기반으로 할 수 있으며 많은 경우 무한 결과의 경우 진행하지 않아도 됩니다.

따라서 다음 명령을 실행하기 전에 값을 확인해야 합니다.

이를 위해 결과가 무한대인지 여부를 확인하는 isinf 함수가 있습니다. 예를 참조하십시오.

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

double divide(double x, double y) { return x / y; }
int main() {
  double res = divide(7, 3);
  if (!isinf(res))
    printf("Result is %lf\n", res);
  else
    printf("The result is infinity, and further computations not possible\n");
  res = divide(7, 0);
  if (!isinf(res))
    printf("Result is %lf\n", res);
  else
    printf("The result is infinity, and further computations not possible\n");
  return 0;
}

결과를 무한대와 비교하기 위해 결과를 isinf 함수에 전달하는 if 문에 주목하십시오. res에 무한한 값이 있는 경우 printf 문을 건너뜁니다.

출력:

Result is 2.33333
The result is infinity, and further computations not possible

무한 결과의 경우 더 이상 진행할 수 없다는 것이 출력에서 분명합니다. 그러나 프로그램은 비정상적인 종료를 수행하지 않습니다. 어쨌든 프로그래머는 필요한 데이터를 저장하고 로그를 작성할 수 있습니다.

C의 음의 무한대

또한 C에는 음의 무한대가 있습니다. 예를 들어 무한대에 음수를 곱하면 결과에서 음의 무한대가 됩니다.

이 간단한 코드를 참조하십시오.

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

int main() {
  double res = -1 * INFINITY;
  printf("Result is %lf\n", res);
  return 0;
}

이 코드의 출력은 Result is -inf입니다. -INFINITY 조작을 이해하기 위해 또 다른 예를 살펴보겠습니다.

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

double divide(double x, double y) { return x / y; }
int main() {
  double res = divide(7, 3);
  if (!isinf(res))
    printf("Result is %lf\n", res);
  else
    printf("The result is infinity, and further computations not possible\n");
  res = divide(-7, 0);
  if (res != -INFINITY)
    printf("Result is %lf\n", res);
  else
    printf(
        "The result is negative infinity, and further computations not "
        "possible\n");
  return 0;
}

여기에서 divide 함수에 대한 두 번째 함수 호출은 음수를 0으로 나누어 음의 무한대와 같은 값을 반환하도록 요청합니다.

출력:

Result is 2.33333
The result is negative infinity, and further computations not possible

이 자습서에서는 두 가지 측면을 모두 다루었습니다. 먼저 무한 결과의 경우 비정상 종료로부터 프로그램을 저장하는 방법에 대해 논의했습니다.

그 후, 프로그램이 무한 값을 포함하는 조건식을 개발하기 위해 무한대를 추가로 조작할 수 있는 방법을 자세히 살펴보았습니다.