<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 ゼロ (正または負)
- FP_NORMAL 完全仮数による有限値
- FP_SUBNORMAL 仮数を減らした有限値
[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
[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
の 2 つの値v1 とv2 を加算し、その値をresult に記録する。加算が型T
の有効範囲を超えた場合はtrue
を返し、そうでない場合はfalse
を返す。
8ビット、16ビット、32ビットの整数型、およびポインタのサイズの整数型に対する実装が保証されている。その他の型に対するオーバーフロー計算は、もし利用可能であれば、プライベートAPIとみなされます。
この関数は Qt 6.1 で導入されました。
quint64 qFloatDistance(double a, double b)
a とb の間の表現可能な浮動小数点数の数を返します。
この関数はqFloatDistance(float, float)
と同じ目的ですが、2 つのdouble
数間の距離を返します。その範囲は、2つのfloat
数 ([-DBL_MAX,DBL_MAX]
) の場合よりも大きいので、戻り値の型は quint64 である。
qFuzzyCompare()も参照 。
quint32 qFloatDistance(float a, float b)
a とb の間の表現可能な浮動小数点数の数を返す。
この関数は、qFuzzyCompare() と同様に、浮動小数点数の近似比較を行う代替手段を提供する。しかし、この関数は2つの数値間の距離を返すので、呼び出し元は許容されるエラーを選択することができます。誤差は相対的なものであり、例えば 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() を呼び出すことで、これをチェックすることができます。
戻り値は "誤差 "とみなすことができるので、例えば2つの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)
[constexpr noexcept]
bool qFuzzyCompare(double p1, double p2)
浮動小数点値p1 とp2 を比較し、等しいとみなされた場合はtrue
を返し、そうでない場合はfalse
を返します。
p1 またはp2 のどちらかが 0.0 である値の比較は機能しないことに注意。また、どちらか一方の値が NaN または無限大である値の比較も機能しない。どちらかの値が常に0.0である場合は、代わりにqFuzzyIsNull 。どちらかの値が0.0になる可能性が高い場合は、両方の値に1.0を加算するのが1つの解決策である。
// 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
2つの数値は相対的に比較され、数値が小さいほど厳密性が高くなります。
注意:この関数はスレッドセーフです。
[constexpr noexcept]
bool qFuzzyCompare(float p1, float p2)
浮動小数点値p1 とp2 を比較し、等しいとみなされた場合はtrue
を返し、そうでない場合はfalse
を返す。
2つの数値は相対的に比較され、数値が小さいほど厳密性が高くなります。
注意:この関数はスレッドセーフである。
[constexpr noexcept]
bool qFuzzyIsNull(double d)
d の絶対値が 0.0 の 0.000000000001 以内であれば真を返す。
注:この関数はスレッドセーフである。
[constexpr noexcept]
bool qFuzzyIsNull(float f)
f の絶対値が 0.0 から 0.00001f 以内であれば真を返す。
注意:この関数はスレッドセーフです。
double qInf()
無限個のビットパターンを double で返す。
qIsInf()も参照のこと 。
bool qIsFinite(double d)
doubled が有限個の場合はtrue
を返す。
bool qIsFinite(float f)
floatf が有限個の場合はtrue
を返す。
bool qIsInf(double d)
doubled が無限大と等しい場合はtrue
を返す。
qInf()も参照のこと 。
bool qIsInf(float f)
floatf が無限大と等しい場合はtrue
を返す。
qInf() も参照の こと。
bool qIsNaN(double d)
doubled が数値(NaN)でない場合はtrue
を返す。
bool qIsNaN(float f)
floatf が数値(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 のビットパターンを double で返します。
qIsNaN()も参照 。
[constexpr]
qint64 qRound64(double d)
d を最も近い 64 ビット整数に丸めます。
ゼロから半分の値を丸める(例: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.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.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.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 のビットパターンを double で返す。
[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 で導入されました。
この関数は Qt 6.1 で導入されました©2024 The Qt Company Ltd. ここに含まれる文書の著作権はそれぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。