왜 두 표현식의 결과가 달라야합니까?
같은 일이 gcc와 python에서 발생합니다. 여기서 무슨 일이 일어나고있는거야? 그것을 막을 수있는 방법이 있습니까?
GCC, 파이썬 및 Google 계산기에서 큰 부동 소수점 계산 오류
답변
부동 소수점 숫자는 정밀도를 제한했다. 큰 숫자 (1e20)에 작은 숫자 (3)를 추가하면 큰 숫자와 같은 결과가 나오는 경우가 많습니다. 즉
가(3 + 1e20) - 1e20 = 1e20 - 1e20 = 0
double
의 정밀도는 약 15 진수이다 따라서, 현재의 경우, float
들 정밀도 7 십진수있다. 이 타임 스탬프에 관련이 있지만
는 기사 “Don't store that in a float” 가장 중요한 포인트를 arithmetics을 떠 사용할 때 얻을 수있는 함정의 대략적인 개요를 제공합니다 :
-
:
- 다양한 크기의 부동 소수점을 더하거나 뺄 때마다 정밀도를 잃어 버릴 때까지 기다려야합니다.
- 'float'대신 'double'을 사용하는 것이 올바른 해결책이지만, 종종 mor 전자 안정적인 알고리즘은 널리 다양한 크기입니다 두 번째 경우는 3 10²⁰을 추가하고,에서
이 실제 예는 몇 가지를 보여줍니다
더 중요하다. 제한된 정밀도의 복소수 (약 14 자리, 4 바이트 부동 소수점 (단 정밀도)의 경우 7) 때문에 결과에서 3이 손실됩니다. 그러나 처음에 1020을 빼면 0이되고, 3을 더하면 결과가 전혀 변경되지 않습니다.
이러한 연산 순서의 이러한 약간의 차이는 특정 계산에서 중요해질 수 있으며 IEEE 플랫폼에서 부동 소수점 숫자를 처리 할 때는 항상 염두에 두어야 할 사항입니다. 아무런 이유없이 갑자기 끊어 지거나 몇 가지 특수한 상황이 발생했을 때만 몇 시간 동안 잘 돌아가는 시뮬레이션은 부동 소수점 연산으로 인해 쉽게 발생할 수 있습니다.
주셔서 감사합니다. – Rsh
- 1. 파이썬 부동 소수점 오류
- 2. 부동 소수점 계산
- 3. GCC 컴파일시 부동 소수점 최적화
- 4. 부동 소수점 실수 부동 소수점 오류
- 5. C++ 및 matlab 부동 소수점 계산
- 6. 인텔 : 부동 소수점 숫자 계산
- 7. 팬더 부동 소수점 오류
- 8. MIPS 부동 소수점 오류
- 9. 파이썬 배열의 부동 소수점 정밀도
- 10. System.Double.cs의 부동 오류 부동 소수점 상수 범위
- 11. 부동 소수점 계산의 오류 추정
- 12. 가장 가까운 부동 소수점 값을 계산
- 13. 부동 소수점 및 높이
- 14. 나누기 및 부동 소수점
- 15. NASM 부동 소수점 오류 부동 소수점 스택에 조작을 수행에서 작업
- 16. 부동 소수점
- 17. 부동 소수점 오류 -1. # J의 의미는 무엇입니까?
- 18. 부동 소수점 값 유지
- 19. 부동 소수점
- 20. 파이썬 부동 소수점 자연과 작은 유형으로 변환
- 21. 조립 부 및 부동 소수점
- 22. 부동 소수점 변환 및 성능
- 23. C# 및 부동 소수점 부정확
- 24. Vala에 대한 큰 정수 및 임의/다중 정밀도 부동 소수점
- 25. 테이블 인덱스의 루아 부동 소수점 오류
- 26. 고정 소수점 알고리즘에서 부동 소수점 변환
- 27. Python "float"및 PostgreSQL의 부동 소수점 수
- 28. XMLSerialization 부동 소수점 정확도
- 29. tcl에서 부동 소수점 비교
- 30. 예기치 않은 부동 소수점 표현은
+1; 파이썬에서는 적어도'(3 + int (1e20)) - int (1e20)'을하고'3'을 얻을 수 있습니다. 참조 용으로 –