C++における1e9(初期化、無限大)の説明
(
初心者にやさしい、シンプルでわかりやすい
)
序文
C++初心者が1e9に遭遇すると、「これってどういう意味?どんな使い道があるのだろう?なぜ、遭遇する問題のいくつかをこの方法で処理する必要があるのでしょうか?ここでは、個人的に理解していることをいくつか紹介します。
1. 1e9とは
一般的にはコンピュータにおける科学的記数法の表現である。
1e9 = 1
10^9 = 1000000000.
例:9e8 = 9
10^8 = 90000000000.
eは10を意味し、eの後の数字はeの何倍という細分化を意味する。
2. C++で1e9
int num1 = 1e9;
int num1 = 1e10;
The output is.
num1 = 1 000 000 000.
num2 = 1 410 065 408.
そこで質問ですが、なぜnum2は100000000に等しくないのでしょうか?
C/C++のint型は32ビットで、範囲は-2147483648から2147483647までです。
intは4バイト、つまり32ビットを占めますが、シンボルを表す最初のビットを除けば、31ビットが利用可能です。
10進数で1e10の時、2進数に変換すると
10
0101 0100 0000 1011 1110 0100 0000 最初の2桁はデータオーバーフローの問題があります。
そして、0101 0100 0000 1011 1110 0100 0000を10進数に変換すると、1 410 065 408となります。
3. C++の変数が1e9の代入で初期化される
int count = 1e9.
res = min(res, count);
実際には、あるいはアルゴリズムの問題を解くときには、変数を初期化して1e9という値を代入し、その後に最小値を計算するコードを記述することになります。
この場合、1e9の目的は、この変数に初期の大きな値を代入することで、後のコードでこの変数と他の変数の最小値を取る必要があるからです。最大値に初期化する、つまり無限大に初期化することで、初期化の目的である、後で比較したり最小値を取得することが容易になります。
時には大きさを比較する必要がありますし、matlabのような言語では無限大を取るために、非常に大きな値を取る必要があります。
4. C++で正負の無限大を表現する
正の無限大:0x3f3f3f
負の無限大: 0xc0c0c0c0
int a=0x3f3f3f3f;
int b=0xc0c0c0c0;
Output.
a=1061109567
b=-1061109568
5.mod 1e9+7
アルゴリズムの問題では、次のような状況に遭遇することがあります。
結果が大きくなる可能性があるので、mod 1e9+7、すなわちmod 1000000007 .
または ( a * b ) % c = [ ( a % c ) * ( b % c ) ] % c そして、このcはやはり1e9+7であることがほとんどです。
結果が大きいとき、mod 1e9+7演算が適用されることがある。なぜですか?
最初に
1e9+7は非常に大きな数で、int32ビットの最大値は2147483647なので、int32ビットでは1000000007は十分に大きいです。int64ビットの最大値は2^63-1で、1000000007ではint64ではその2乗はオーバーフローしないので、大きな数を掛けるときは、(a*b)%c = ( (a%c)*(b%c))%c ですから、掛けるときは双方はモジュロ10000007で、その後int64内にセーブされます。
はオーバーフローしません
. ちょっと正規化みたいな感じですね。
答えの正しさだけを求め、答えの値を気にしないような質問の場合、以下のようなことが必要になることがあります。
大きな値をとる数値を四捨五入して小さくする。
2番目
次に、1e9+7は素数であり、modulo prime pの場合a*n(非p倍)はループノード長がpであり、これがコンフリクトを減らす理由の一つである。一方、modulo prime pの環はゼロ係数なし環であり、pの倍数でない2つの数を掛け合わせてmodulo pしてもゼロにはならない(ゼロになると、倍数の掛け算の場合の競合確率が大幅に上昇する)。例えば、結果が全て偶数の場合...0、2、4...の3ケースしかないが、2、4、1、3(4=5-1)...の4ケースもあり得るので、モジュロ法で大きな素数をモジュロして競合を減らすとハッシュテーブルができる。このように、質問者はあなたが正解する確率を下げたいのでしょう。
この記事がお役に立ちましたら、下のトリプレットをクリックしてください!ありがとうございました。
関連
-
[解決済み] エラー: 'int' 型の rvalue からの 'int&' 型の非恒等式参照の無効な初期化
-
[解決済み] エラーです。C++はすべての宣言に型指定子を必要とします。
-
[解決済み] C++で画像を開く、表示する?
-
[解決済み] SDL_main' への未定義の参照
-
[解決済み] Google Protobufを使ったMap構造の実装方法
-
[解決済み] cin.getlineで「No instance of overloaded function」エラーを修正するにはどうしたらいいですか?
-
[解決済み] #error このファイルには、ISO C++ 2011 標準のコンパイラーとライブラリーのサポートが必要です。
-
[解決済み] PreprocessorDefinitionsの設定にVSマクロを使用する
-
[解決済み] ヘッダーとC++ファイルをインクルードすることの違いは何ですか?
-
[解決済み] 不完全なクラス型へのC++ポインタは許されない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] ブール変数はデフォルトで常に偽ではないのですか?
-
[解決済み] サイコロ2個を1000回振る
-
[解決済み] Arduinoのベクター
-
[解決済み] c++ getline() が複数回呼ばれたときに、コンソールからの入力を待たない。
-
[解決済み] CreateCompatibleBitmap() は黒い HBITMAP を返します。
-
[解決済み] 形式パラメータとは何ですか?
-
[解決済み] G++コンパイラーエラー - ここで最初に合成されたメソッドが必要です。
-
[解決済み] C++ : 暗黙の定数変換でオーバーフローが発生する [-Woverflow].
-
[解決済み] C++: pragma comment(lib, "XXX") は、実際に "XXX" に対して何をするのですか?