IEEE 754 모델을 가정 할 때 조작 수는 신경 쓰이지 않아 32 비트 연산으로 정확하게 수행 할 수 있습니다.
참조 Shewchuck 적응 정밀 부동 소수점 연산과 빠른 강력한 기하학적 술어 - http://www.cs.berkeley.edu/~jrs/papers/robustr.pdf 또는 http://www-2.cs.cmu.edu/afs/cs/project/quake/public/papers/robust-arithmetic.ps
는 두 정확한 작업 (용지를 참조)
(product,residue) = twoproduct(a,b)
(sum,residue) = twosum(a,b)
는 그런 다음 두 가지로 N + K를 분해해야 정의 당신이 잠재적으로 부정확 곱셈
,691,363이 다음
NkH = (N+k)/256;
NkL = (N+K) % 256;
예를 들어 24 비트 significands, (210)
(HH , HL) = twoproduct(NkH , b)
(LH , LL) = twoproduct(NkL , b)
그럼 당신은
(c1,c2,c3,c4,c5) = sort_increasing_magnitude(HH,HL,LH,LL,a)
(s2,s1) = twosum(c2,c1)
(s3,s2) = twosum(c3,s2)
(s4,s3) = twosum(c4,s3)
(s5,s4) = twosum(c5,s4)
(다시 볼 수있는 종이)이 (HH, HL) + (LH, LL) +이 빠른 속도로 확장 합과 정확하게 수행 할 수있는
합계 수
그런 다음 무한 정밀도 산술로 연산이 수행 된 것처럼 s5에서 정확히 반올림 된 결과를 얻습니다.
내 II의 느낌은 옵션 II가 더 우수하다는 것입니다 (성능은 더 좋음). 그러나 나는 그것이 더 정확하다는 것을 확신하지 못합니다. 나는 그것이 데이터에 달려 있다고 생각한다. –
마지막 결과의 반올림 오류가 체인의 각 추가에 대한 반올림 오류의 합계가되므로 최하위 작업은 수행 할 수있는 최악의 작업 중 하나입니다. 첫 번째 방법을 사용하거나'c_i = c_0 + b * i '를 사용하는 것이 더 정확할 것입니다. –
@PatriciaShanahan 귀하의 의견에 답변을 제출해야합니다. 이 질문에 대한 중요한 정보입니다. – shoelzer