>  기사  >  백엔드 개발  >  이동: float64를 float32로 변환할 때 정밀도 손실을 확인하는 방법

이동: float64를 float32로 변환할 때 정밀도 손실을 확인하는 방법

WBOY
WBOY앞으로
2024-02-09 09:10:20389검색

Go:如何检查将 float64 转换为 float32 时的精度损失

PHP 편집자 Baicao는 오늘 일반적인 문제에 대한 해결책을 소개합니다: float64를 float32로 변환할 때 발생할 수 있는 정밀도 손실을 확인하는 방법. 부동 소수점 숫자를 변환할 때 두 데이터 유형 간의 비트 수 차이로 인해 정밀도 손실이 발생할 수 있습니다. 이 기사에서는 변환 전과 후의 값을 비교하여 손실이 있는지 확인하는 방법을 자세히 설명하고 개발자가 이 문제를 더 잘 처리하는 데 도움이 되는 실행 가능한 솔루션을 제공합니다.

질문 내용

float64 값을 받았지만 이를 float32 값으로 다른 서비스에 유선으로 보내야 하는 시나리오가 있습니다. 우리는 수신된 값이 항상 float32에 맞아야 한다는 것을 알고 있습니다. 그러나 안전을 위해 float32 로 변환하면 데이터가 손실된다는 사실을 기록하고 싶습니다.

float32와 float64를 직접 비교할 수 없기 때문에 이 코드 블록은 컴파일되지 않습니다 .

으아악

이 문제가 발생하는지 쉽게 확인할 수 있는 방법이 있나요? 이 검사는 자주 발생하므로 문자열 변환을 피하고 싶습니다.

해결 방법

float32 值转换回 float64은 확인용으로만 사용할 수 있습니다.

변환된 값이 동일한 값을 나타내는지 확인하려면 원래 값(입력)과 비교하면 됩니다. ok bool 信息(而不是 error만 반환하는 것만으로도 충분/관용적:

으아악

(참고: nan와 같은 극단적인 경우는 확인되지 않습니다.)

테스트해 보세요:

으아악

출력(go 놀이터에서 시도해 보세요):

으아악

변환된 값이 입력값과 매우 유사하더라도 일반적으로 ok = false 结果,因为 float32 的精度小于 float64가 제공됩니다.

그래서 실제로는 변환된 값의 차이를 확인하는 것이 더 유용할 것입니다. 제안된 솔루션은 절대적인 차이를 확인하는데 이는 그다지 유용하지 않습니다. 예: 1000000.11000000 是非常接近的数字,即使差异是 0.10.00010.00011 的差异要小得多:0.00001, 하지만 숫자에 비해 차이가 훨씬 큽니다.

따라서 상대적인 차이를 확인해야 합니다. 예:

으아악

테스트해 보세요:

으아악

출력(go 놀이터에서 시도해 보세요):

으아악

위 내용은 이동: float64를 float32로 변환할 때 정밀도 손실을 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제