> 백엔드 개발 > Golang > Go에서 부동 소수점 숫자의 평등을 정확하게 비교하는 방법은 무엇입니까?

Go에서 부동 소수점 숫자의 평등을 정확하게 비교하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-10 08:14:09
원래의
219명이 탐색했습니다.

How to Accurately Compare Floating-Point Numbers for Equality in Go?

Go Float 비교: 포괄적인 접근 방식

Go에서 부동 소수점 숫자(float)의 동등성을 비교하려면 다음과 같은 이유로 미묘한 접근 방식이 필요합니다. 부동 소수점의 고유한 한계와 복잡성

비트 표현 사용: 제한된 솔루션

제공된 코드는 이진 표현을 검사하고 1비트 차이를 허용하여 부동 소수점을 비교합니다. 그러나 이 접근 방식은 이진 표현에서 비트 위치의 중요성을 무시하므로 결함이 있습니다. 예를 들어, 매우 큰 부동 소수점의 경우 최하위 비트의 차이는 중요하지 않을 수 있지만 매우 작은 부동 소수점의 경우 상당한 편차를 나타낼 수 있습니다.

더 정확하고 일반적인 접근 방식

더 강력하고 정확한 방법은 math.Abs ​​함수를 사용하여 두 부동소수점 사이의 차이를 계산하는 것입니다. 적절한 임계값을 설정하면 차이가 무시할 수 있는지 확인하고 부동 소수점을 "거의 같다"고 간주할 수 있습니다.

이 접근 방식을 사용하면 다음이 가능합니다.

  • 작은 부동 소수점과 대형 부동 소수점을 모두 처리합니다. 효과적으로
  • 1비트 차이 휴리스틱의 주관성을 제거
  • 균등 임계값을 기반으로 설정 특정 애플리케이션 요구 사항

구현 예

아래는 구현 예입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿