1. ホーム
  2. c++

C++における1e9(初期化、無限大)の説明

2022-02-21 01:24:52
<パス

( 初心者にやさしい、シンプルでわかりやすい )
序文
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ケースもあり得るので、モジュロ法で大きな素数をモジュロして競合を減らすとハッシュテーブルができる。このように、質問者はあなたが正解する確率を下げたいのでしょう。

この記事がお役に立ちましたら、下のトリプレットをクリックしてください!ありがとうございました。