11

math.hせっかくなので、クランプ機能はminありmaxません。それらは通常、実装に関してはすべて似ているため、すべて同じライブラリに表示されると思いました。

math.hクランプ機能|マクロを備えていない特定の理由はありますか? の作成者math.hがそれを必要と見なさなかったのか、それとも考えていなかっただけなのか?

編集: 人々はここでポイントを逃しているようです. 私は怠け者で新しいクランプを書くのが好きではないので、なぜ彼らがクランプを追加しなかったのかを尋ねているのではありません.ライブラリ)。

私が尋ねているのは、「C++ の標準化機関や作成者、またはクランプ関数を .xml に含めないことを選択した人が、何らかの理由を知っている人はいmath.hますか?」ということです。

ないことに文句を言っているわけでmath.hはありません。

編集:関数の書き方を明示的に尋ねて いませんclamp()

4

4 に答える 4

12

おそらく理由:

double clamp(double x, double upper, double lower)
{
    return min(upper, max(x, lower));
}

あなたの質問よりも少ない文字を使用します。

別のタイプフリーメソッドは

#define CLAMP(x, upper, lower) (MIN(upper, MAX(x, lower)))

MIN通常の形式でとMAXマクロがあると仮定します。

テンプレート化された C++ バージョンは、次のように実装できます。

template<class T>
const T& clamp(const T& x, const T& upper, const T& lower) {
    return min(upper, max(x, lower));
}

当然、後者は古き良き C では機能しません。

より建設的に言えば、作成者はそれを追加するのに十分な必要性を感じなかったので、関数は標準ライブラリにありません。目的の機能を実現する方法は明らかなので (上記を参照)、特に苦労することはありません。ライブラリに含まれるものの標準ができたら、さらに関数を追加すると、名前空間が既存のコードと衝突するリスクがあり、ドキュメントやテストなどが必要になるため、新しい関数が交差する必要がある一般的な有用性のしきい値があります。

于 2014-02-09T09:21:02.433 に答える
6

これには本当に答えられませんが、とにかく 2 セント追加します。この標準化委員会のページで数学関数を検索した後、関数についての言及が見つかりませんでしたclamp()

私は、他の同様の文書の中で、数学関数を提案する文書であるこの PDFを見つけました。ほとんどはかなり専門的なようです。これは、誰もそれを提案していないという理由だけで、関数 likeclamp()が標準ライブラリに存在しないと私に信じさせます。

個人的には、おそらく 99% の開発者が使用しないであろう関数よりも、単純な (そしてよく使用される) 数学関数が標準ライブラリに追加されることを望みます。後者には専用のライブラリがありますが、もちろんそれは私の無関係な意見です。

私が確実に標準に追加してほしいものの例: (優れた) GLM ライブラリーのコア関数の大部分。これには以下も含まclamp()れます:-)

おそらく、提案を書き、コメント/承認のために提出する時が来ました。それはそれについて何かをする唯一の方法です。このページでは、提案に関する情報を紹介します。

于 2014-02-11T18:15:55.467 に答える
0

必要なすべての機能が組み込まれていることは期待できません。また、こちらをご覧いただければ、Javaにもクランプ機能はありません。クランプ関数は簡単に記述できますが、作成者は、標準ライブラリに含めるほど頻繁に使用されていないと考えていたようです。

于 2014-02-09T07:43:35.113 に答える