1

最初の考えでは非常に単純に思えますが、このケースをカバーする適切な説明が見つかりませんでした。

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 doublea に等しいことができdoubleます. 変換static_cast<long double>(std::numeric_limits<long long>::max())は常に正しく行われますか?

または、範囲を確認する別のより良い方法はありますか?

4

1 に答える 1