언더플로와 오버플로가 없는 부동 소수점 숫자 x의 경우 x+x와 x*2의 결과가 동일합니까?
P粉064448449
P粉064448449 2023-09-07 10:08:44
0
1
567

예를 들어 처음에는 다음 코드가 있었습니다.

으아악

나중에 y가 x와 동일해야 한다는 사실을 발견했습니다. x+y를 x * 2로 재구성하고 싶었지만 재구성 전후에 전체 프로그램이 동일하게 작동하는지 확인해야 했습니다. x+x는 x*2와 동일합니까? +와 *가 다른 계산 메커니즘을 사용하여 다른 결과로 반올림되는지는 알 수 없습니다.

테스트한 내용:

으아악

i 의 특정 범위에서는 올바른 것 같지만 모든 부동 소수점 숫자에 대해서는 올바른지 확실하지 않습니다.

P粉064448449
P粉064448449

모든 응답(1)
P粉012875927

JavaScript는 ECMAScript의 구현이며 ECMAScript 사양은 IEEE 754 알고리즘을 사용하는 것을 의미하며, IEEE-754 "배정밀도"(binary64) 형식은 "... 숫자에 적용될 때, 연산자 IEEE 754-2019의 관련 작업을 참조합니다..."

IEEE 754 및 기타 합리적인 부동 소수점 시스템에서 연산 결과는 선택한 반올림 규칙에 따라 반올림된(예: 가장 가까운 동점으로 반올림, 짝수로 반올림, 짝수로 반올림), 0으로 반올림된 정확한 수학적 결과입니다. 반올림 또는 내림). IEEE 754-2019 4.3 내용:

Since x+x 和 2•x 具有相同的数学结果,因此浮点运算 x+x code> 和 2*x는 동일한 계산 결과를 생성해야 합니다. 동일한 반올림 규칙이 적용되면 둘 다 동일한 수학적 결과를 제공하므로 계산이 동일해야 합니다.

위에서 다룬 내용x是数字的情况,包括+∞和-∞。如果 xNaN,则 x+x2*x 也会产生 NaN code>,所以结果又是一样的。 (请注意,在这种情况下,x+x == 2*x 将计算为 false,因为 NaN 不等于任何内容,甚至不等于其本身。尽管如此,这两个运算会产生相同的结果;如果使用 2*x 代替 x+x, 프로그램 동작은 동일하며 그 반대도 마찬가지입니다. )

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿