最初の考えでは非常に単純に思えますが、このケースをカバーする適切な説明が見つかりませんでした。
64 ビット値を返すメソッドがあります。値は値を使用して内部的に計算されlong double
ます。long double
メソッドの最後で、が値の範囲内にあるかどうかを確認し、long long
それ以外の場合は最大long long
値を割り当てたいと思います。
負の結果がないため、正の範囲のみをチェックする次のコードを使用します。
long long calculateSomething()
{
long double calculatedValue = ...;
long long result;
if (calculatedValue > static_cast<long double>(std::numeric_limits<long long>::max())) {
result = std::numeric_limits<long long>::max();
} else {
result = static_cast<long long>(std::floor(calculatedValue));
}
return result;
}
今私は疑問に思います、long double
a に等しいことができdouble
ます. 変換static_cast<long double>(std::numeric_limits<long long>::max())
は常に正しく行われますか?
または、範囲を確認する別のより良い方法はありますか?