<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>, 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>, bool> qSubOverflow(T v1, T v2, T *result)

상세 설명

<QtNumeric> 헤더 파일에는 숫자 값을 비교하고 조정하기 위한 다양한 숫자 함수가 포함되어 있습니다.

함수 문서

[constexpr] template <typename T> T qAbs(const T &t)

t 를 T 형식의 0과 비교하여 절댓값을 반환합니다. 따라서 T가 double인 경우, t 는 (double) 0과 비교됩니다.

예시:

int absoluteValue;
int myValue = -4;

absoluteValue = qAbs(myValue);
// absoluteValue == 4

참고: T 가 부호 있는 정수형 이고, t 의 값이 std::numeric_limits<T>::min() 인경우 , 동작은 정의되지 않습니다.

[constexpr, since 6.1] template <typename T> typename std::enable_if_t<std::is_unsigned_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()도 참조하십시오 .

int qFpClassify(double val)

int qFpClassify(float val)

부동소수점 값을 분류합니다.

반환 값은 ` <cmath>`에 정의되어 있으며, ` val`의 부동 소수점 클래스에 따라 다음 중 하나를 반환합니다:

  • FP_NAN: 숫자가 아님
  • FP_INFINITE 무한대 (양수 또는 음수)
  • FP_ZERO: 0 (양수 또는 음수)
  • FP_NORMAL: 맨티사가 완전한 유한수
  • FP_SUBNORMAL: 축소된 맨티사를 가진 유한 수

[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 이내일 경우 true를 반환합니다.

참고: 이 함수는 스레드 안전합니다.

double qInf()

무한대의 비트 패턴을 double 형식으로 반환합니다.

qIsInf()도 참조하십시오 .

bool qIsFinite(double d)

double형 변수 ` d `가 유한한 수일 경우 ` true `를 반환합니다.

bool qIsFinite(float f)

부동소수점 수 f 가 유한한 수일 경우, true 를 반환합니다.

bool qIsInf(double d)

double형 변수 ` d `가 무한대와 같을 경우 ` true `를 반환합니다.

qInf()도 참조하십시오 .

bool qIsInf(float f)

부동소수점 수 ` f `가 무한대와 같을 경우 ` true `를 반환합니다.

qInf()도 참조하십시오 .

bool qIsNaN(double d)

double형 변수 ` d `가 숫자가 아닌 경우(NaN), ` true `를 반환합니다.

bool qIsNaN(float f)

부동소수점 수 f 가 숫자가 아닌 경우(NaN) true 를 반환합니다.

[constexpr, 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()

quiet NaN의 비트 패턴을 double 형식으로 반환합니다.

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.3f;
float valueB = 42949672960.7f;

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.3f;
float valueB = 2.7f;

int roundedValueA = qRound(valueA);
// roundedValueA = 2
int roundedValueB = qRound(valueB);
// roundedValueB = 3

참고: d 값이 int 범위 밖에 있을경우 , 동작은 정의되지 않습니다.

double qSNaN()

신호용 NaN의 비트 패턴을 double 형식으로 반환합니다.

[constexpr, since 6.1] template <typename T> typename std::enable_if_t<std::is_unsigned_v<T>, bool> qSubOverflow(T v1, T v2, T *result)

v2 에서 v1 를 뺀 후, 그 결과를 result 에 저장합니다. 뺄셈 연산 결과로 인해 T 의 유효 범위를 초과하는 오버플로가 발생하면 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.

8비트, 16비트, 32비트 정수형과 포인터 크기의 정수형에 대해서는 구현이 보장됩니다. 다른 유형에 대한 오버플로 연산은, 사용 가능한 경우, 비공개 API로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

© 2026 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.