C에서 큰 정밀도 클래스를 구현하는 것이 목표인데 숫자를 더할 때 문제가 발생했습니다. 0xffffffff와 0x04를 추가하면 예상되는 0x0100000003 대신 0xffff0003이 표시됩니다.
코드에서 강조 표시된 섹션은 다음과 같습니다.
if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); ret.data[i].data += ret.data[i + 1].carry; }
다음은 다음과 같습니다. 왜 그것이 잘못된 결과를 초래하는가? 결과:
캐리 전파: 루프의 각 반복에서 이전 추가의 캐리가 현재 결과에 추가되어야 합니다. 하지만 이 코드는 ret.data[i].data가 255이고 ret.data[i 1].carry가 1인 경우에만 캐리를 적용합니다. 즉, 캐리가 항상 전파되지는 않아 오답이 발생한다는 의미입니다.
잘못된 저장 순서: mpfl 클래스는 최하위 바이트가 가장 높은 인덱스에 저장되는 리틀 엔디안 형식으로 숫자를 저장하는 것으로 보입니다. 이는 더 높은 순서의 바이트에서 캐리를 처리하기가 더 어렵기 때문에 숫자를 저장하는 데 선호되는 방법이 아닙니다.
이러한 문제를 해결하려면 다음 권장사항을 고려하세요.
위 내용은 내 C 대형 정밀도 추가 전파가 캐리 비트를 올바르게 전달하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!