<QtNumeric> - Qt Numeric Functions
<QtNumeric> 헤더 파일은 일반적인 숫자 함수를 제공합니다. 더 보기...
Header: | #include <QtNumeric> |
함수
T | qAbs(const T &t) |
(since 6.1) typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> | qAddOverflow(T v1, T v2, T *result) |
quint64 | qFloatDistance(double a, double b) |
quint32 | qFloatDistance(float a, float b) |
int | qFpClassify(double val) |
int | qFpClassify(float val) |
bool | qFuzzyCompare(double p1, double p2) |
bool | qFuzzyCompare(float p1, float p2) |
bool | qFuzzyIsNull(double d) |
bool | qFuzzyIsNull(float f) |
double | qInf() |
bool | qIsFinite(double d) |
bool | qIsFinite(float f) |
bool | qIsInf(double d) |
bool | qIsInf(float f) |
bool | qIsNaN(double d) |
bool | qIsNaN(float f) |
(since 6.1) typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> | qMulOverflow(T v1, T v2, T *result) |
double | qQNaN() |
qint64 | qRound64(double d) |
qint64 | qRound64(float d) |
int | qRound(double d) |
int | qRound(float d) |
double | qSNaN() |
(since 6.1) typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> | qSubOverflow(T v1, T v2, T *result) |
함수 문서
부동소수점 값을 분류합니다.
반환 값은 <cmath>
: val 의 부동 소수점 클래스에 따라 결정되는 다음 중 하나를 반환합니다:
- FP_NAN 숫자가 아님
- FP_INFINITE 무한대(양수 또는 음수)
- FP_ZERO 0(양수 또는 음수)
- FP_NORMAL 전체 만티사가 있는 유한함
- 만티사가 줄어든 FP_SUBNORMAL 유한 유한
[constexpr]
template <typename T> T qAbs(const T &t)
t 을 T 타입의 0과 비교하여 절대값을 반환합니다. 따라서 T가 더블인 경우 t 는 (더블) 0과 비교됩니다.
예시:
int absoluteValue; int myValue = -4; absoluteValue = qAbs(myValue); // absoluteValue == 4
[since 6.1]
template <typename T> typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> qAddOverflow(T v1, T v2, T *result)
숫자 타입 T
의 두 값 v1 과 v2 을 더하고 result 에 값을 기록합니다. 더한 값이 타입 T
의 유효 범위를 넘으면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
8비트, 16비트 및 32비트 정수형과 포인터 크기의 정수형에 대해 구현이 보장됩니다. 다른 타입에 대한 오버플로 연산은 사용 가능한 경우 비공개 API로 간주됩니다.
이 함수는 Qt 6.1에 도입되었습니다.
quint64 qFloatDistance(double a, double b)
a 와 b 사이의 표현 가능한 부동 소수점 숫자의 수를 반환합니다.
이 함수는 qFloatDistance(float, float)
와 같은 용도로 사용되지만 두 개의 double
숫자 사이의 거리를 반환합니다. 범위가 두 개의 float
숫자([-DBL_MAX,DBL_MAX]
)보다 크기 때문에 반환 유형은 quint64입니다.
qFuzzyCompare()도 참조하세요 .
quint32 qFloatDistance(float a, float b)
a 와 b 사이에서 표현 가능한 부동 소수점 숫자의 수를 반환합니다.
이 함수는 qFuzzyCompare()와 유사한 부동 소수점 숫자의 근사 비교를 수행하는 다른 방법을 제공합니다. 그러나 이 함수는 두 숫자 사이의 거리를 반환하므로 호출자가 허용되는 오류를 선택할 수 있습니다. 오차는 상대적이므로 예를 들어 1.0E-5와 1.00001E-5 사이의 거리는 110을 반환하고 1.0E36과 1.00001E36 사이의 거리는 127을 반환합니다.
이 함수는 부동 소수점 비교에 특정 정밀도가 필요한 경우에 유용합니다. 따라서 a 과 b 이 같으면 0을 반환합니다. 32비트 부동 소수점 숫자에 대해 반환되는 최대값은 4,278,190,078입니다. 이는 -FLT_MAX
와 +FLT_MAX
사이의 거리입니다.
인수가 Infinite
또는 NaN
인 경우 이 함수는 의미 있는 결과를 제공하지 않습니다. qIsFinite()를 호출하여 이를 확인할 수 있습니다.
반환 값은 "오류"로 간주할 수 있으므로 예를 들어 두 개의 32비트 부동 소수점 숫자를 비교하고 대략적인 24비트 정밀도만 필요한 경우 이 함수를 다음과 같이 사용할 수 있습니다:
if (qFloatDistance(a, b) < (1 << 7)) { // The last 7 bits are not // significant // precise enough }
qFuzzyCompare()도 참조하세요 .
[constexpr noexcept]
bool qFuzzyCompare(double p1, double p2)
부동 소수점 값 p1 과 p2 을 비교하여 같은 값으로 간주되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
p1 또는 p2 중 하나가 0.0인 값을 비교하는 것은 작동하지 않으며, 값 중 하나가 NaN 또는 무한대인 값을 비교하는 것도 작동하지 않습니다. 값 중 하나가 항상 0.0인 경우 qFuzzyIsNull 을 대신 사용합니다. 값 중 하나가 0.0일 가능성이 있는 경우 한 가지 해결책은 두 값에 1.0을 더하는 것입니다.
// Instead of comparing with 0.0 qFuzzyCompare(0.0, 1.0e-200); // This will return false // Compare adding 1 to both values will fix the problem qFuzzyCompare(1 + 0.0, 1 + 1.0e-200); // This will return true
두 숫자는 상대적인 방식으로 비교되며, 숫자가 작을수록 정확도가 더 강해집니다.
참고: 이 함수는 스레드에 안전합니다.
[constexpr noexcept]
bool qFuzzyCompare(float p1, float p2)
부동 소수점 값 p1 과 p2 을 비교하여 같다고 판단되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
두 숫자는 상대적인 방식으로 비교되며, 숫자가 작을수록 정확성이 더 강해집니다.
참고: 이 함수는 스레드에 안전합니다.
[constexpr noexcept]
bool qFuzzyIsNull(double d)
d 의 절대값이 0.0의 0.000000000001 이내이면 true를 반환합니다.
참고: 이 함수는 스레드 안전합니다.
[constexpr noexcept]
bool qFuzzyIsNull(float f)
f 의 절대값이 0.0의 0.00001f 이내이면 참을 반환합니다.
참고: 이 함수는 스레드 안전합니다.
double qInf()
무한수에 대한 비트 패턴을 더블로 반환합니다.
qIsInf()도 참조하세요 .
bool qIsFinite(double d)
이중 d 이 유한수인 경우 true
을 반환합니다.
bool qIsFinite(float f)
f 이 유한수인 경우 true
을 반환합니다.
bool qIsInf(double d)
이중 d 이 무한대와 같으면 true
을 반환합니다.
qInf()도 참조하세요 .
bool qIsInf(float f)
부동 소수점 f 이 무한대와 같으면 true
을 반환합니다.
qInf()도 참조하세요 .
bool qIsNaN(double d)
이중 d 이 숫자(NaN)가 아닌 경우 true
을 반환합니다.
bool qIsNaN(float f)
플로트 f 가 숫자(NaN)가 아닌 경우 true
를 반환합니다.
[since 6.1]
template <typename T> typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> qMulOverflow(T v1, T v2, T *result)
v1 와 v2 을 곱하고 결과 값을 result 에 기록합니다. 곱셈이 T
유형의 유효한 범위를 넘으면 true
을 반환하고 그렇지 않으면 false
을 반환합니다.
8비트, 16비트 및 32비트 정수형과 포인터 크기의 정수형에 대해 구현이 보장됩니다. 다른 타입에 대한 오버플로 연산은 사용 가능한 경우 비공개 API로 간주됩니다.
이 함수는 Qt 6.1에 도입되었습니다.
double qQNaN()
조용한 NaN의 비트 패턴을 더블로 반환합니다.
qIsNaN()도 참조하세요 .
[constexpr]
qint64 qRound64(double d)
d 을 가장 가까운 64비트 정수로 반올림합니다.
0에서 반올림합니다(예: 0.5 -> 1, -0.5 -> -1).
참고: 이 함수는 높은 정밀도에 대한 정확성을 보장하지 않습니다.
예시:
double valueA = 42949672960.3; double valueB = 42949672960.7; qint64 roundedValueA = qRound64(valueA); // roundedValueA = 42949672960 qint64 roundedValueB = qRound64(valueB); // roundedValueB = 42949672961
참고: d 값이 qint64
범위를 벗어나는 경우 동작이 정의되지 않습니다.
[constexpr]
qint64 qRound64(float d)
d 을 가장 가까운 64비트 정수로 반올림합니다.
0에서 반올림합니다(예: 0.5f -> 1, -0.5f -> -1).
참고: 이 함수는 높은 정밀도에 대한 정확성을 보장하지 않습니다.
예시:
float valueA = 42949672960.3; float valueB = 42949672960.7; qint64 roundedValueA = qRound64(valueA); // roundedValueA = 42949672960 qint64 roundedValueB = qRound64(valueB); // roundedValueB = 42949672961
참고: d 값이 qint64
범위를 벗어나는 경우 동작이 정의되지 않습니다.
[constexpr]
int qRound(double d)
d 을 가장 가까운 정수로 반올림합니다.
0에서 반올림합니다(예: 0.5 -> 1, -0.5 -> -1).
참고: 이 함수는 높은 정밀도에 대한 정확성을 보장하지 않습니다.
예시:
double valueA = 2.3; double valueB = 2.7; int roundedValueA = qRound(valueA); // roundedValueA = 2 int roundedValueB = qRound(valueB); // roundedValueB = 3
참고: d 값이 int
범위를 벗어나는 경우 동작이 정의되지 않습니다.
[constexpr]
int qRound(float d)
d 을 가장 가까운 정수로 반올림합니다.
0에서 반올림합니다(예: 0.5f -> 1, -0.5f -> -1).
참고: 이 함수는 높은 정밀도에 대한 정확성을 보장하지 않습니다.
예시:
float valueA = 2.3; float valueB = 2.7; int roundedValueA = qRound(valueA); // roundedValueA = 2 int roundedValueB = qRound(valueB); // roundedValueB = 3
참고: d 값이 int
범위를 벗어나는 경우 동작이 정의되지 않습니다.
double qSNaN()
신호 NaN의 비트 패턴을 더블로 반환합니다.
[since 6.1]
template <typename T> typename std::enable_if_t<std::is_unsigned_v<T> || std::is_signed_v<T>, bool> qSubOverflow(T v1, T v2, T *result)
v1 에서 v2 을 빼고 결과값을 result 에 기록합니다. 빼기가 T
유형의 유효한 범위를 초과하면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
8비트, 16비트 및 32비트 정수 유형과 포인터 크기의 정수 유형에 대해 구현을 사용할 수 있도록 보장됩니다. 다른 타입에 대한 오버플로 연산은 사용 가능한 경우 비공개 API로 간주됩니다.
이 함수는 Qt 6.1에 도입되었습니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.