mpfl 추가의 캐리 전파 문제
mpfl 추가 기능에서 캐리 값을 올바르게 전파하는 데 문제가 발생하여 합계가 잘못됩니다. 구체적으로, 두 개의 32비트 값을 더한 후 결과가 단일 32비트 값의 범위를 초과하면 캐리 비트가 제대로 전파되지 않아 잘못된 합계가 발생합니다.
아키텍처적 접근 방식
이 문제를 해결하려면 하드웨어 구현에 사용되는 것과 유사한 ALU(산술 논리 장치) 아키텍처를 고려하는 것이 좋습니다. ALU 작동 후 코드를 모델링하면 계산을 단순화하고 정확도를 높일 수 있습니다.
코드 수정
다음 코드는 수정된 버전을 제공합니다. 캐리 전파 문제를 해결하는 추가 기능:
mpfl operator+(const mpfl &lhs, const mpfl &rhs) { unsigned long i; mpfl ret(0); mpfl trhs(rhs); ALU32 alu; for (i = lhs.nbytes; i >= 0; i--) { alu.adc(ret.data[i].data, lhs.data[i].data, trhs.data[i].data); if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); } } return ret; }
키 수정
위 내용은 다중 정밀도 부동 소수점(mpfl) 추가가 캐리 비트를 올바르게 전파하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!