1. ホーム
  2. java

[解決済み] javaにクランプ機能はありますか?

2022-02-10 09:02:32

質問内容

があるとします。 value 通常、私はこのように範囲にクランプします。 [0..1] . つまり、範囲開始より下にある場合は範囲開始まで増加させ、範囲終了より上にある場合は範囲終了まで減少させるのです。

clampedValue = Math.max(0, Math.min(1, value));

範囲にクランプする機能は内蔵されていますか?

どのように解決するのですか?

別の回答で提示された汎用クランプメソッドを見たところ、これには ボックス/アンボックス は、プリミティブ型に対する考慮が必要です。

public static <T extends Comparable<T>> T clamp(T val, T min, T max) {...}

float clampedValue = clamp(value, 0f, 1f);

これは Float この結果、各パラメータに対して 3 回のボックス操作と、返された型に対して 1 回のアンボックス操作が発生します。

これを避けるには、ひたすら手書きで書くか、欲しい型に対応した汎用性のない関数を使用することです。

public static float clamp(float val, float min, float max) {
    return Math.max(min, Math.min(max, val));
}

そして、必要なプリミティブ型ごとに同じメソッドをオーバーロードすればよいのです。