[C++] infinite

C/C++ 에서의 무한대

infinite 이미지좀 가져올라고 검색했더니 가수 인피니트가 뜬다....짜증난다..

우선 C++에는 무한대 타입이 존재한다. <limits>std::numeric::limits::infinity() 이다.

하지만 이 메소드는 실수타입에서만 제대로 동작한다. 정수타입에서는 0을 반환하기때문에..(0은 무한대가 아니다..알겠지만)

#include <iostream>
#include <limits>
using namespace std;  
int main() {  
    int max = numeric_limits<int>::max();
    int inf = numeric_limits<int>::infinity();
    if (max < inf){
        cout << "what?" << endl;
    }
    cout << inf <<  '\t' << max << endl;
}
0       2147483647  
계속하려면 아무 키나 누르십시오 . . .

위 소스처럼 동작하면 안된다.

우리는 어떤 숫자 타입에서도 동작하는 infinite를 구현할 수 있다.

C언어에서는 아쉽지만 C++에서 처럼 연산자 오버로딩이 없으므로, 완벽하게 지원할 순 없다.


infinite.h

#pragma once
#ifndef MATH_INFINITE_H_7DE_6_B_INCLUDED
#define MATH_INFINITE_H_7DE_6_B_INCLUDED
#ifdef __cplusplus
const class{    //this object is const object  
   //infinite is left value
public:  
   template<typename T>   
   bool operator==(T&& type)const{
      return false;
   }
   template<typename T>   
   bool operator!=(T&& type)const{
      return true;
   }
   template<typename T>   
   bool operator<(T&& type)const{
      return false;
   }
   template<typename T>   
   bool operator<=(T&& type)const{
      return false;
   }
   template<typename T>   
   bool operator>(T&& type)const{   
      return true;
   }
   template<typename T>   
   bool operator>=(T&& type)const{
      return true;
   }
}infinite = {};
using infinite_t = decltype(infinite);  
//infinite is right value
template<typename T>  
bool operator==(T type, const infinite_t& i){  
   return false;
}
template<typename T>  
bool operator!=(T type, const infinite_t& i){  
   return true;
}
template<typename T>  
bool operator<(T type, const infinite_t& i){  
   return true;
}
template<typename T>  
bool operator<=(T type, const infinite_t& i){  
   return true;
}
template<typename T>  
bool operator>(T type, const infinite_t& i){  
   return false;
}
template<typename T>  
bool operator>=(T type, const infinite_t& i){  
   return false;
}
#else
//c language
#include<float.h>
#define infinite DBL_MAX
#endif   //__cplusplus
#endif   //MATH_INFINITE_H_7DE_6_B_INCLUDED

연산자 오버로딩을 알면 구현할 수 있는 간단한 예제이다.

변경 이력

2016년 6월 11일 글 등록

References

http://en.cppreference.com/w/cpp/types/numeric_limits/infinity