std::numeric_limits 사용 주의사항
7108 단어 C/C++
원본:http://blog.csdn.net/clever101
C/C++11 에서 std::numericlimits 는 템 플 릿 류 로 라 이브 러 리 컴 파일 플랫폼 에서 기본 산술 형식의 극치 등 속성 정 보 를 제공 하고 전통 적 인 C 언어 가 사용 하 는 예비 처리 상수(구체 적 인 참고:C+상용 수치 유형의 값 범위 의 매크로 정의)를 대체 합 니 다.그 중에서 사용 예 는 다음 과 같다.
#include
#include
/* reference:
http://www.cplusplus.com/reference/limits/numeric_limits/
https://msdn.microsoft.com/en-us/library/c707ct0t.aspx
*/
int test_numeric_limits_1()
{
std::cout << std::boolalpha;
std::cout << "Minimum value for int: " << std::numeric_limits::min() << std::endl;
std::cout << "Maximum value for int: " << std::numeric_limits::max() << std::endl;
std::cout << "int is signed: " << std::numeric_limits::is_signed << std::endl;
std::cout << "Non-sign bits in int: " << std::numeric_limits::digits << std::endl;
std::cout << "int has infinity: " << std::numeric_limits::has_infinity << std::endl;
std::cout << "Minimum value for float: " << std::numeric_limits::min() << std::endl; // min returns the smallest positive value the type can encode, not the lowest
std::cout << "Lowest value for float: " << std::numeric_limits::lowest() << std::endl; // the lowest value
std::cout << "Maximum value for float: " << std::numeric_limits::max() << std::endl;
std::cout << "float is signed: " << std::numeric_limits::is_signed << std::endl;
std::cout << "Non-sign bits in float: " << std::numeric_limits::digits << std::endl;
std::cout << "float has infinity: " << std::numeric_limits::has_infinity << std::endl;
std::cout << "Minimum value for unsigned short: " << std::numeric_limits::min() << std::endl;
std::cout << "Maximum value for unsigned short: " << std::numeric_limits::max() << std::endl;
std::cout << "is_specialized(float): " << std::numeric_limits::is_specialized << std::endl;
std::cout << "is_integer(float): " << std::numeric_limits::is_integer << std::endl;
std::cout << "is_exact(float): " << std::numeric_limits::is_exact << std::endl;
std::cout << "is_bounded(float): " << std::numeric_limits::is_bounded << std::endl;
std::cout << "is_modulo(float): " << std::numeric_limits::is_modulo << std::endl;
std::cout << "is_iec559(float): " << std::numeric_limits::is_iec559 << std::endl;
std::cout << "digits10(float): " << std::numeric_limits::digits10 << std::endl;
std::cout << "radix(float): " << std::numeric_limits::radix << std::endl;
std::cout << "min_exponent(float): " << std::numeric_limits::min_exponent << std::endl;
std::cout << "max_exponent(float): " << std::numeric_limits::max_exponent << std::endl;
std::cout << "min_exponent10(float): " << std::numeric_limits::min_exponent10 << std::endl;
std::cout << "max_exponent10(float): " << std::numeric_limits::max_exponent10 << std::endl;
std::cout << "epsilon(float): " << std::numeric_limits::epsilon() << std::endl;
std::cout << "round_style(float): " << std::numeric_limits::round_style << std::endl;
std::cout << "The smallest nonzero denormalized value for float: "
<< std::numeric_limits::denorm_min()<< std::endl;
std::cout << "The difference between 1 and the smallest value greater than 1 for float: "
<< std::numeric_limits::epsilon()<< std::endl;
std::cout << "Whether float objects allow denormalized values: "
<< std::numeric_limits::has_denorm << std::endl;
std::cout << "Whether float objects can detect denormalized loss: "
<< std::numeric_limits::has_denorm_loss << std::endl;
std::cout << "Whether float objects have quiet_NaN: "
<< std::numeric_limits::has_quiet_NaN << std::endl;
std::cout << "Whether float objects have a signaling_NaN: "
<< std::numeric_limits::has_signaling_NaN << std::endl;
std::cout << "The base for type float is: "
<< std::numeric_limits::radix << std::endl;
std::cout << "The maximum rounding error for type float is: "
<< std::numeric_limits::round_error() << std::endl;
std::cout << "The rounding style for a double type is: "
<< std::numeric_limits::round_style << std::endl;
std::cout << "The signaling NaN for type float is: "
<< std::numeric_limits::signaling_NaN() << std::endl;
std::cout << "Whether float types can detect tinyness before rounding: "
<< std::numeric_limits::tinyness_before << std::endl;
std::cout << "Whether float types have implemented trapping: "
<< std::numeric_limits::traps << std::endl;
return 0;
}
하지만 std::numericlimits 에 서 는 컴 파일 오류 가 자주 발생 합 니 다.
1>main.cpp(473):error C2059:문법 오류:":"
1> main.cpp(474):warning C4003:"min"매크로 의 실제 인삼 이 부족 합 니 다.
인터넷 에서 자 료 를 찾 아 보 니 이 잘못된 원인 을 알 게 되 었 다.windows.h 에서 min 매크로 를 정 의 했 고 그 중에서 도 이 정의 가 있 으 며 이들 은 충돌 했다.windows.h 에서 Microsoft 는 min/max 두 개의 매크로 를 정 의 했 습 니 다.
#ifndef NOMINMAX
#define NOMINMAX
#endif
참고 문헌:
1.C++/C++11 중 std::numericlimits 사용
2.opencv 프로 그래 밍 해결 warning C4003:"max"매크로 의 실제 인삼 부족
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
09.문자 / 메모리영역//메모리 영역 스택 데이터 ROM(코드) //읽기전용메모리 문자 char(1),wchar(2) 바이트 . char c = 'a'; wchar_t wc = L'a';...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.