>백엔드 개발 >Golang >Go에서 big.Int가 0인지 1인지 효율적으로 확인할 수 있는 방법은 무엇입니까?

Go에서 big.Int가 0인지 1인지 효율적으로 확인할 수 있는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-26 03:38:09747검색

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

big.Int에서 0 테스트

big.Ints로 작업할 때 값이 0인지 테스트해야 할 때가 있습니다. 표준 방법 이는 Cmp(zero) == 0을 사용하여 big.Int를 0과 비교하는 것입니다. 그러나 이는 특히 빠르고 효율적인 방법을 찾고 있는 경우 느린 작업이 될 수 있습니다. 0을 테스트합니다.

다행히도 더 빠른 방법이 있습니다. 한 가지 방법은 big.Int 표현의 원시 바이트를 나타내는 바이트 조각을 반환하는 Int.Bits() 함수를 사용하는 것입니다. 0의 경우 슬라이스가 비어 있습니다. 슬라이스의 길이를 확인하면 big.Int가 0인지 빠르게 확인할 수 있습니다.

import "math/big"

func isZero(i *big.Int) bool {
    return len(i.Bits()) == 0
}

또는 Int.BitLen() 함수를 사용하여 빅의 비트 길이를 반환할 수도 있습니다. .Int. 0의 경우 비트 길이는 0이 됩니다.

import "math/big"

func isZero(i *big.Int) bool {
    return i.BitLen() == 0
}

이 방법은 Cmp()를 사용하여 big.Int를 0과 비교하는 것보다 훨씬 빠릅니다. 벤치마크에 따르면 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()를 사용하여 1을 나타내는 big.Int와 big.Int를 비교하는 것보다 훨씬 빠릅니다. 벤치마크에 따르면 10배 이상 빠른 것으로 나타났습니다.

big.Int가 0인지 1인지 테스트하는 데 이러한 더 빠른 방법을 활용하면 코드 성능을 크게 향상시킬 수 있습니다.

위 내용은 Go에서 big.Int가 0인지 1인지 효율적으로 확인할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.