수치 컴퓨팅 영역에서는 정밀도를 유지하고 반올림 오류를 제어하는 것이 중요합니다. IEEE 754 부동 소수점 숫자는 실수를 표현하고 조작하기 위한 표준화된 메커니즘을 제공하는 동시에 다양한 정밀도 요구 사항을 충족하기 위해 다양한 반올림 모드를 제공합니다.
이 질문은 IEEE 754 부동 소수점의 반올림 모드를 변경하는 가장 효율적인 접근 방식을 탐구합니다. -포인트 번호. x86 플랫폼용 어셈블리 솔루션도 탐색되지만 기본 초점은 이식 가능한 C 솔루션에 있습니다.
이식 가능한 C 코드의 경우 표준 솔루션에는
#include <fenv.h> #pragma STDC FENV_ACCESS ON // Store the original rounding mode const int originalRounding = fegetround(); // Establish the desired rounding mode fesetround(FE_TOWARDZERO); // Perform desired operations... // ... // Restore the original mode afterwards fesetround(originalRounding);
이전 플랫폼의 경우 C99 지원이 부족하면 어셈블리 솔루션이 필요할 수 있습니다. 이러한 시나리오에서 반올림 모드를 조정하려면 일반적으로 fldcw 명령을 통해 x87 장치와 ldmxcsr 명령을 통해 SSE 장치 모두에 대한 제어 비트를 수정해야 합니다.
의 경우 비표준이지만 편리한 옵션인 Microsoft Visual C(MSVC)를 사용할 수 있습니다. _controlfp() 함수를 활용하여 반올림 모드를 조작할 수 있습니다.
unsigned int originalRounding = _controlfp(0, 0); _controlfp(_RC_CHOP, _MCW_RC); // Perform desired operations... // ... _controlfp(originalRounding, _MCW_RC);
참고로 다양한 반올림 모드와 해당 C 및 MSVC 이름이 아래 나열되어 있습니다. :
Rounding Mode | C Name | MSVC Name |
---|---|---|
To nearest | FE_TONEAREST | _RC_NEAR |
Toward zero | FE_TOWARDZERO | _RC_CHOP |
To infinity | FE_UPWARD | _RC_UP |
To -infinity | FE_DOWNWARD | _RC_DOWN |
위 내용은 C에서 IEEE 754 부동 소수점 숫자의 반올림 모드를 효율적으로 변경하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!