ホームページ >バックエンド開発 >Golang >big.Int がゼロかどうかを確認するより速い方法はありますか?

big.Int がゼロかどうかを確認するより速い方法はありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 04:38:15918ブラウズ

Is There a Faster Way to Check if a big.Int is Zero?

big.Int が 0 かどうかをテストするより速い方法はありますか?

問題:

を使用する場合big.Int の場合、多くの場合、値が 0 であるかどうかをテストする必要があります。big.Int を、big.Int を表す big.Int と比較するときに、 0 (例: zero := big.NewInt(0)) は機能しますが、0 に特化したより早い方法はありますか?

解決策:

はい、2 つあります別の big.Int:

1 と比較するよりも大幅に高速な 0 をテストする方法。ビット スライスの長さを確認します:

big.Int は、値の内部バイナリ表現を表すバイトのスライスを返す Bits() メソッドを公開します。 0 の場合、このスライスは空 (nil) になります。したがって、ビット スライスの長さが 0:

if len(i1.Bits()) == 0 {
}

2 であるかどうかを簡単に確認できます。ビット長を確認します:

BitLen() メソッドは、値を表すのに必要なビット数を返します。 0 の場合、ビット長は 0 です。 したがって、次のようにすることもできます。

if i1.BitLen() == 0 {
}

ベンチマーク結果:

従来の比較アプローチと比較すると、両方の上記の方法により、パフォーマンスが大幅に向上します:

BenchmarkCompare-8      76975251            13.3 ns/op
BenchmarkBits-8         1000000000           0.656 ns/op
BenchmarkBitLen-8       1000000000           1.11 ns/op

のテスト1

0 のテストほど高速ではありませんが、同様のアプローチを使用して big.Int が 1 に等しいかどうかをテストできます。つまり、ビットの内容が 1 を表し、符号が正であるかどうかを確認します。

以上がbig.Int がゼロかどうかを確認するより速い方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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