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

Go で big.Int が 0 か 1 かを効率的に確認するにはどうすればよいですか?

DDD
リリース: 2024-11-26 03:38:09
オリジナル
752 人が閲覧しました

How Can I Efficiently Check if a big.Int is 0 or 1 in Go?

big.Int での 0 のテスト

big.Int を使用する場合、値 0 をテストする必要がある場合があります。標準的な方法これは、Cmp(zero) == 0 を使用して big.Int をゼロと比較することです。ただし、これは、特に迅速で効率的な処理を探している場合には、処理が遅くなる可能性があります。 0 をテストする方法。

幸いなことに、より高速な方法が利用可能です。 1 つの方法は、Int.Bits() 関数を使用することです。この関数は、big.Int の表現の生のバイトを表すバイトのスライスを返します。 0の場合、スライスは空になります。スライスの長さをチェックすることで、big.Int が 0 かどうかをすぐに判断できます。

import "math/big"

func isZero(i *big.Int) bool {
    return len(i.Bits()) == 0
}
ログイン後にコピー

あるいは、Int.BitLen() 関数を使用して、big.Int のビット長を返すこともできます。 .Int. 0 の場合、ビット長は 0 になります。

import "math/big"

func isZero(i *big.Int) bool {
    return i.BitLen() == 0
}
ログイン後にコピー

これらのメソッドは、Cmp() を使用して big.Int とゼロを比較するよりも大幅に高速です。ベンチマークでは、0 のテストでは 20 倍以上、1 のテストでは 10 倍以上高速であることが示されています。

big.Int での 1 のテスト

同様のアプローチを使用すると、 big.Int の値 1 をテストする関数を作成することもできます。この関数は、Int.Bits() によって返されたスライスの長さが 1 で、唯一の要素が 1 であるかどうかをチェックします。さらに、big.Int の符号が正であるかどうかもチェックします。

import "math/big"

func isOne(i *big.Int) bool {
    bits := i.Bits()
    return len(bits) == 1 && bits[0] == 1 && i.Sign() > 0
}
ログイン後にコピー

この方法は、Cmp() を使用して big.Int と 1 を表す big.Int を比較するよりも大幅に高速です。ベンチマークでは、10 倍以上高速であることが示されています。

これらの高速メソッドを利用して、big.Int が 0 か 1 であるかをテストすることで、コードのパフォーマンスを大幅に向上させることができます。

以上がGo で big.Int が 0 か 1 かを効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート