2015-01-07 4 views
4

내가 IEEE-754 부동 소수점 값을 계산에 가능한 한 많은 정밀도를 유지하려면 더 나은 :IEEE-754 부동 소수점 : 최상의 정밀도를 위해 먼저 나눕니다.

a = b * c/d 

또는

a = b/d * c 

는 차이가 있나요? 있다면 입력 값의 크기에 의존 하는가? 그리고 크기가 중요한 경우, 값의 일반적인 크기가 알려질 때 최상의 순서가 결정되는 방법은 무엇입니까?

+2

일반적인 것은 아니지만, a = b * c/d의 표현에서 b * c가 너무 커서 b 및 c가 매우 큰 수를 나타내는 경우를 고려해야 할 수도 있습니다. 다른 경우는 다음과 같을 수 있습니다. 같은 생각을 가지고 움직였다. – NoChance

답변

2

오버플로 또는 언더 플로가 발생하지 않으며 입력 값이 일정하게 분포 된 유효 숫자를 가졌다 고 가정하면이 값은 동일합니다. 글쎄, 나는 엄격한 증거를 가지고 있다고 가정합니다. (2^156 입력이 있기 때문에 실제적으로 배정도에서는 불가능합니다.) 평균 오차에 차이가 있다면 그것은 작습니다 . Sipe으로 낮은 정밀도로 시도 할 수 있습니다.

어떤 경우에도 오버 플로우/언더 플로우가없는 경우 지수의 정확한 값만이 중요합니다.

이 다른 표현식에 추가되거나 다시 사용되지 않으면 재사용되지 않을 수 있습니다. 그러면 FMA를 사용하여 다음과 같이 곱셈을 그룹화 할 수 있으므로 나누기가 더 재미있을 수 있습니다 (따라서 단일 반올림).

2

값의 크기에 따라 다릅니다. 분명히 0으로 나누면 모든 베팅은 꺼지지만 곱셈이나 나눗셈이 denormal이면 후속 연산이 정밀도를 잃을 수 있습니다.

Goldberg의 정액 논문 What Every Computer Scientist Should Know About Floating-Point Arithmetic을 공부하는 것이 유용 할 수 있습니다. 여기서는받을 가능성이있는 답변보다 훨씬 나은 내용을 설명합니다. (Goldman은 IEEE-754의 원저자 중 한 명이었습니다.)

관련 문제