問題タブ [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.
c++ - GCC と MSVC の桁数の違い10
次のコードがあります。
- GCC 4.4 は 19 を返します
- MS VS 9.0 は 18 を返します
誰かが説明してもらえますか?なぜ2つに違いがあるのですか? このような定数は、コンパイラに関係なく同じであると予想していました。
c++ - なぜnumeric_limitなのか:: min / maxは定数ではありませんか?
誰かがその理由の背後にある理由std::numeric_limit<T>::min
を説明でき、max
定数ではなく関数であるかどうか疑問に思いましたか?
さらに、テンプレートパラメータの一部として最小/最大値を利用するためにどのような手法を使用できるか知りたいです。例:
c++ - sizeofはint型でどのように機能しますか?
私は比較する小さなプログラムを持っています
(1)sizeof、(2)numeric_limits :: Digits、(3)およびループの結果
C++実装の「int型」のサイズに関してすべてが同じことを報告するようにするためです。ただし、sizeofの内部についてはわからないため、numeric_limits::digitsを報告しているだけなのかどうか疑問に思う必要があります。ありがとう
c++ - デフォルト パラメータ値への numeric_limits の使用
範囲パラメーターを持つテンプレート統計クラスがあります。
最大許容値と最小許容値のデフォルト値を入れたいのですが、最小値は浮動小数点型と整数型で同じではありません。
普通に書ける
デフォルトのパラメータとして使用できないことがわかりました
このようなことを達成する方法はありますか?
c++ - ネストされた名前指定子で使用される不完全な型、なぜですか?
次のコードは固定長の算術型の一部です。問題が含まれるようにできる限り減らしました。
次の行をコンパイルするときに前のコードを使用すると、問題なくコンパイルされます。
今、私はクラスにサポートを追加したいnumeric_limits
ので、次のコードを追加しました(これはクラスの一部です):
次のコードをコンパイルする場合:
gccコンパイラは次のエラーを生成します:
error: incomplete type 'MathX::int_t<128u, unsigned int, int, long long unsigned int, long long int>::gint' used in nested name specifier
。
VC ++コンパイラは、次のエラーを生成しますerror C2039: 'comp_c' : is not a member of 'MathX::global_int<t>'
。
タイプを持つ変数の宣言をタイプt
から削除するglobal_int
と、コードは問題なくコンパイルされますが、それらの行は残っている必要があり、この問題を修正することも、なぜ発生するのかを知ることもできません。
objective-c - Objective-C は c++ の numeric_limits::max() に相当します
数値型 (int、float など) を可能な最大値に初期化するために、C++ STL の numeric_limits 部分を利用することに慣れてきました。つまり、int i=numeric_limits::max()
Objective-Cにこれに相当するものはありますか? Google 検索で INT_MAX と FLT_MAX を使用しているのを見たことがありますが、もっと良い方法があるはずです。
c++ - なぜ C++ の numeric_limits は::最大() == 0?
動作するように見えるコードを次に示します。
しかし、Linux では GCC (4.6.2) と clang (2.9) の両方で失敗します: 列挙型の max() は実際にはゼロです! これは、C++11 列挙型指定子を使用して、列挙型に必要な型を明示的に指定した場合でも当てはまります。
どうしてこれなの?また、C++11 の動作に関しては、明示的に要求されているものですか? 厳密に型指定された列挙型に関する論文である N2347 では、それについての言及は見つかりませんでした。
c++ - このC++コードで「不正なトークン」のコンパイル時エラーが発生するのはなぜですか?
私のアプリケーション(Visual C ++ 2010でコンパイル)では、ヘッダーファイルに次のようなコードがあります。
...および.cppファイル内のいくつかのコード:
これはコンパイルに失敗し、私に次のことを与えます:
------ビルド開始:プロジェクト:テスト、構成:デバッグWin32 ------
test.cpp
c:\ users \ ninja \ document \ visual studio 2010 \ projects \ test \ test \ test.h(10 ):エラーC2589:'::':'::'の右側に不正なトークン
c:\ users \ ninja \ document \ visual studio 2010 \ projects \ test \ test \ test.h(10):エラーC2059:構文エラー:'::'
==========ビルド:0成功、1失敗、0最新、0スキップ==========
問題のある行は、equal()関数の「eps」パラメーターのデフォルト値が定義されている行です。
グーグル検索は、numeric_limitsの他の関数、すなわちmin()とmax()で同様の「違法トークン」エラーが発生したことを明らかにしましたが、これらは、Windows固有のc++標準ライブラリヘッダーファイルに存在する#defineが原因でした。いくつかのレガシーな理由で「最小」と「最大」。epsilon()については言及されていません。ここでエラーが発生する理由について、私は絶対に困惑しています。とにかく、関数名を「equal」から「smartEqual」のようなものに変更しても同じエラーが発生するため、名前は明らかに問題ではありません。とは?
ありがとう!
c++ - std::complex で複雑な無限大を作成するC++で
j が複雑な変数である Inf+Inf*j に等しい複雑な無限大を作成しようとしています。私がこれを行うとき:
複素数 (NaN + Inf*j) を返します。
しかし
複素数 (Inf + 0*j) を返します。
また :
複素数 (NaN + Inf*j) を返します。
ここで何が起こっているか知っている人はいますか?虚部を無限大にしようとすると、実部に NaN が書き込まれます。
もちろん、上記は NaN と Infinity をサポートする型にのみ適用されます。g++ v4.6.1 を使用しています。numeric_limits ヘッダーを見てきましたが、上記がまったく発生する兆候はありません。
上記を文脈に入れるために、私は実際に複雑なnumeric_limitsの部分的な特殊化で上記を行っています。この問題を検討していただきありがとうございます。
元の投稿の改訂
問題を説明するために、完全ではあるが短いプログラムを提供しています。また、結果を生成するためにプログラムをどのようにコンパイルする必要があるかについて、さらに適格な情報をいくつか含めました。
-std=c++0x を指定して Ubuntu の g++ バージョン 4.6.1 で上記をコンパイルすると、次の結果が得られます。
-std=c++0x オプションを指定しない場合、結果は次のようになります。
したがって、実際の問題は、C++0x が指定されている場合に GNU g++ V4.6.1 が回答を返すのはなぜですか?
元の投稿の改訂 2
Octave(MATLABのような数値パッケージ)で次のことを試しました:
a=inf + j*inf
答えは次のとおりです。
a = NaN + Infi
これはまさに私の C++11 コード (C++0x) で見られるものです。Octave が何を使用してコンパイルされているかはわかりません (C++ と FORTRAN の組み合わせだと思います) が、そのパッケージが取得している結果を返す場合、これはよく知られた動作であると思います。
ただし、C++11 ドラフト標準を調べたところ、この動作についての言及は見つかりませんでした。
元の投稿の改訂 3
次の行を追加する
my_complex_inf の構築直後に C++11 用にコンパイルすると、「正しい」回答 (inf、inf) が返されます。残念ながら、これは現在 2 段階のプロセスであり、constexpr 関数でこの種の複雑な無限を作成することはできません。
c++ - 入力ストリームを使用して無限大またはNaN値を読み取ることは可能ですか?
入力ファイルストリームによって読み取られる入力があります(たとえば):
-365.269511 -0.356123 -Inf 0.000000
std::ifstream mystream;
私がファイルからいくつかに読み取るために使用するとき
double d1 = -1, d2 = -1, d3 = -1, d4 = -1;
mystream
(すでに開かれていて、ファイルが有効であると仮定します)、
mystream >> d1 >> d2 >> d3 >> d4;
mystream
失敗状態です。私は期待します
std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;
出力する
-365.269511 -0.356123 -1 -1
。-365.269511 -0.356123 -Inf 0
代わりに出力したいと思います。
このデータセットは、C++ストリームを使用して出力されました。逆のプロセス(出力を読み取る)を実行できないのはなぜですか?探している機能を取得するにはどうすればよいですか?
MooingDuckから:
入力:inf
出力:
参照:http://ideone.com/jVvei
また、この問題に関連しているのはNaN
、例を示していませんが、構文解析です。
私は受け入れられた答えにideoneの完全な解決策を追加しました。また、「Inf」と「nan」のペアリングも含まれています。これは、MatLabなどの他のプログラムから取得される可能性のあるキーワードのバリエーションです。