ホームページ >バックエンド開発 >Golang >big.Int がゼロかどうかを最も効率的に確認するにはどうすればよいですか?

big.Int がゼロかどうかを最も効率的に確認するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-25 05:59:14313ブラウズ

How Can I Most Efficiently Check if a big.Int is Zero?

big.Int の高速 0 テスト

チャレンジ:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。