Go Float 비교: 포괄적인 접근 방식
Go에서 부동 소수점 숫자(float)의 동등성을 비교하려면 다음과 같은 이유로 미묘한 접근 방식이 필요합니다. 부동 소수점의 고유한 한계와 복잡성
비트 표현 사용: 제한된 솔루션
제공된 코드는 이진 표현을 검사하고 1비트 차이를 허용하여 부동 소수점을 비교합니다. 그러나 이 접근 방식은 이진 표현에서 비트 위치의 중요성을 무시하므로 결함이 있습니다. 예를 들어, 매우 큰 부동 소수점의 경우 최하위 비트의 차이는 중요하지 않을 수 있지만 매우 작은 부동 소수점의 경우 상당한 편차를 나타낼 수 있습니다.
더 정확하고 일반적인 접근 방식
더 강력하고 정확한 방법은 math.Abs 함수를 사용하여 두 부동소수점 사이의 차이를 계산하는 것입니다. 적절한 임계값을 설정하면 차이가 무시할 수 있는지 확인하고 부동 소수점을 "거의 같다"고 간주할 수 있습니다.
이 접근 방식을 사용하면 다음이 가능합니다.
구현 예
아래는 구현 예입니다.
import ( "fmt" "math" ) const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold } func main() { a := 0.1 b := 0.2 fmt.Println(almostEqual(a + b, 0.3)) // true }
이 솔루션은 보다 일반적이고 적응성이 뛰어납니다. , 다양한 시나리오를 처리하고 애플리케이션에 적합하게 동등 임계값을 설정할 수 있습니다.
위 내용은 Go에서 부동 소수점 숫자의 평등을 정확하게 비교하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!