NeuroWhAI의 잡블로그

[C++] digits10, max_digits10 본문

개발 및 공부/라이브러리&프레임워크

[C++] digits10, max_digits10

NeuroWhAI 2019. 9. 18. 19:44


std::numeric_limits::digits10

10진법 표기로 text -> T -> text 변환시 항상 자릿수가 보존되는 최소 자릿수 번호.
다르게 말하면 T 타입의 수로 변환할 문자열은 그 원본 텍스트의 digits10 자릿수까지만 항상 보존이 보장된다.

예) ::digits10 == 2
: "42" -> 42 -> "42"는 가능하지만 "200" -> -56 -> "-56"는 실패하니 2자리가 최대.

예) ::digits10 == 6
: "8.589973e9" -> 8.589974e9 -> "8.589974e9"

물론 어떤 수는 저 너머의 자릿수도 보존되지만 그건 예외일 뿐이고 항상 보장해야하는 경우엔 digits10 값을 이용.

 

 

std::numeric_limits::max_digits10

10진법 표기로 T -> text -> T 변환시 원본 값이 보존된다는 것을 항상 보장할 수 있는 최소 표시 자릿수.
다르게 말하면 T 타입의 수는 최대 max_digits10 자리까진 문자열로 표기해야 변환 후에도 값이 보존된다는 것.

예) ::max_digits10 == 0
: 정수는 이걸 따지는 게 무의미함.

예) ::max_digits10 == 9
: 9자리로 표시한다면...
3.145900249481201171875 -> "3.14590025"  -> 3.145900249481201171875 보존된다.
: 만약 9보다 작은 6자리로만 표시한다면...
3.145900249481201171875 -> "3.14590" -> 3.1459000110626220703125 보존안됨.

float지만 9자리를 다 적지 않아도 보존되는 경우가 있으나 역시 예외일 뿐이다.

 

 

참고
https://stackoverflow.com/questions/22458355/what-is-the-purpose-of-max-digits10-and-how-is-it-different-from-digits10
https://en.cppreference.com/w/cpp/types/numeric_limits/digits10
https://en.cppreference.com/w/cpp/types/numeric_limits/max_digits10



Comments