問題タブ [numeric-limits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
765 参照

c++ - C++ での単純な数式のコンパイル時の最適化

基本的に、配列のすべての要素に定数を追加するコードがあります

行列のスカラー型はunsigned short intです。私が検討している他のいくつかのオプションは次のとおりです。

2 番目の解決策は私には最も読みやすいように見えますが、1 番目のオプションと比較してペナルティを支払う必要があります。コンパイル時にこれを事前計算する標準コンパイラはありますか?

現在 gcc 4.6.3 を使用していますが、古いコードに依存しているため、C++11 は使用していません。

アップデート:

アセンブリ出力に関する私の限られた知識から、コンパイラはそれを最適化していないと言います。-std=c++0x フラグを付けても話は同じです。

アセンブリ出力は次のとおりです。

-std=c++0x フラグを指定して方法 2 を使用する

ハードコーディングされたリテラル(26 行目を参照)

Update2

-O2 フラグを使用すると、-std=c++0x フラグを使用するかどうかに関係なく、同一のアセンブリ ファイルが生成されます。

結論

-O2 などの最適化フラグが適切に機能するため、おそらく Method2 がベスト プラクティスです。また、これらのコードはクラス メンバー メソッドの一部になっているため、初期化されたプライベート const 変数を使用することになりました。std::numeric_limits<MyMatrix::Scalar>::max()/2 + 1

0 投票する
1 に答える
175 参照

c++ - 大量のユーザー入力を限界まで減らしますか? (C++)

私の C++ プログラムには、端末から 1 つの数値を収集する関数があります。

ユーザーからの数値入力を受け入れ、signed long long int の範囲外の数値を正確な制限まで減らし、ユーザーに削減を正しく通知し、正常に戻るようにしたいと考えています。

数値以外の入力はすべて完全に破棄し、ユーザーに無限に再プロンプトを表示する必要があります。

大きすぎる入力は自動的に符号付きの制限まで減らされると思っていましたが、代わりにこの関数はそれらを無効として扱い、数値以外の再プロンプトを表示します。どうすればこれを修正できますか?

iostream、string、および climits を含め、名前空間 std をグローバルに使用しています。

0 投票する
2 に答える
205 参照

c++ - ゲーム/プログラムはC ++で制限を超える数値をどのように計算しますか?

すべてのタイプの値 (int、float など) に制限がある場合、Excel やゲームなどのプログラムはこれらよりも大きい数値をどのように計算しますか? 企業は独自の計算機を作成していますか? これを処理する標準ライブラリはありますか?

編集:明快さ

0 投票する
2 に答える
1004 参照

c++ - 条件としての std::numeric_limits

テンプレートの動作を使用std::numeric_limits<T>::is_integerして変更する方法はありますか?std::numeric_limits<T>::is_specialized

たとえば、これを行うことができます:

0 投票する
1 に答える
525 参照

c++ - numeric_limits::max および「'int (*)()noexcept (true)' から 'value_t {aka int}' への無効な変換」

typedef unsigned int value_t;関数を使用して定義された型があります

コンパイラはコンパイルを拒否し、「int (*)()noexcept (true)」から「value_t {aka int}」への変換が無効です。

どういう意味ですか?numeric_limits クラスを調べると、min()関数はテンプレート typename を介して渡された型の変数を返す必要があるためvalue_t、この場合は. では、なぜコードがコンパイルされないのでしょうか?

0 投票する
1 に答える
1611 参照

c++ - double または long double が long long に収まるかどうかを正しく確認するにはどうすればよいですか?

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

64 ビット値を返すメソッドがあります。値は値を使用して内部的に計算されlong doubleます。long doubleメソッドの最後で、が値の範囲内にあるかどうかを確認し、long longそれ以外の場合は最大long long値を割り当てたいと思います。

負の結果がないため、正の範囲のみをチェックする次のコードを使用します。

今私は疑問に思います、long doublea に等しいことができdoubleます. 変換static_cast<long double>(std::numeric_limits<long long>::max())は常に正しく行われますか?

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

0 投票する
1 に答える
138 参照

c++ - numeric_limits にバグがありますか、それとも単に混乱しているだけですか?

加算演算が double をアンダーフローするかどうかを判断するコードをデバッグしているときに、少なくとも自分の頭の中で奇妙な動作に遭遇しました。これは、私が見つけたものを示すサンプルプログラムです。

このコードを実行すると、結果として true になります。これはバグですか、それとも睡眠不足ですか?

0 投票する
3 に答える
1170 参照

c++ - C++では、1024ビットをわずか8バイトに2倍に格納できますか?

ここで何が起こっているのかわかりません。

次のデータ型のサイズをバイト単位で見つけます。

何!!!

double氏は、このような大きな値をわずか8バイトでどのように保存していますか???

0 投票する
2 に答える
22227 参照

c++ - std::numeric_limits::max の構文エラー

次のようなクラス構造体定義があります。

問題は、「std::numeric_limits::max()」を使用できず、コンパイラーが次のように言うことです。

Error 8 error C2059: syntax error : '::'

Error 7 error C2589: '(' : illegal token on right side of '::'

私が使用しているコンパイラは Visual C++ 11 (2012) です。