チャレンジ:
big.Int 値がに等しい0.
解決策:
効率を重視し、ゼロ初期化されたインスタンスと比較するよりも、big.Int のバイナリ表現を直接チェックすることをお勧めします。
big.Int は、Int.Bits() を通じて生のバイト表現へのアクセスを提供します。この公開されたスライスは、基になる配列への参照を維持し、コストのかかるコピーを回避します。
0 のテスト:
ドキュメントでは、big.Int のゼロ値が 0 と等しいと指定されています。したがって、nil はスライスのゼロ値であるため、空の Bits() スライスはゼロ値を示します。このチェックは従来の比較よりも高速です:
if len(i1.Bits()) == 0 { // i1 is 0 }
また、0 のビット長が 0 であることを確認するため、Int.BitLen() を使用することもできます:
if i1.BitLen() == 0 { // i1 is 0 }
ベンチマーク:
タイミングの比較により、顕著なパフォーマンスが実証されましたゲイン:
BenchmarkCompare: 13.3 ns/op BenchmarkBits: 0.656 ns/op BenchmarkBitLen: 1.11 ns/op
追加の注意:
同様の最適化を、big.Int 値が 1 に等しいかどうかのテストに適用できます。より複雑ですが、両方のチェックが必要になります。ビットの内容と記号。
以上がbig.Int がゼロかどうかを最も効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。