1

long double 유형이 64 비트보다 정밀도가 높은 플랫폼에서 작업하고 있다고 가정합니다. 주어진을 일부 규정 된 반올림 (위쪽, 아래쪽, 가장 가까운 반올림 등)을 사용하여 일반 배정도 숫자로 변환하는 가장 빠른 방법은 무엇입니까? long double을 위 또는 아래로 반올림하여 double로 변환

는 질문이 더 정확하게 나 구체적인 예를 줄 수 있도록 : N 주어진 long double하자, 그리고 M는 그 값이 (실제) 값 M - N 등이 M> N을 최소화 double합니다. 이 M은 내가 찾고 싶은 상향식 변환입니다.

FP 환경의 반올림 모드를 적절하게 설정하고 간단한 캐스트 (예 : (double) N)를 수행 할 수 있습니까?

설명 : : 플랫폼이 부동 소수점 계산을위한 IEEE 표준 (IEEE 754)을 지원한다고 가정 할 수 있습니다.

+0

확실히 FP 하드웨어는 어떤 비트 조작보다 빠릅니다. 당신은 소프트웨어 솔루션을 찾고 있습니까? – chux

+0

BTW,'(double) N '을 의미하지 않습니까? – chux

+0

귀하의 질문은 플랫폼에 따라 다르나, 제안 된 솔루션은이 작업에 대한 정확한 설명입니다. – tmyklebu

답변

2

FP 환경의 반올림 모드를 적절하게 설정하고 간단한 형 변환 (예 : (double) N)을 수행 할 수 있습니까?

예, 컴파일러가 IEEE 754를 구현하는 한 (대다수는 적어도 대략적으로 수행함). 하나의 부동 소수점 형식에서 다른 부동 소수점 형식으로의 변환은 IEEE 754에 따라 반올림 모드가 적용되어야하는 연산 중 하나입니다. long double에서 double까지 변환하려면 반올림 모드를 위쪽으로 설정하고 변환을 수행하십시오. C++ 컴파일러에 의해 허용되어야한다 C99에서

는 (I 구문은 C++에 대해 지정된하지 확신) :

#include <fenv.h> 
#pragma STDC FENV_ACCESS ON 
… 
fesetround(FE_UPWARD); 
double d = (double) ld; 

PS를 : 당신이 당신의 컴파일러가 제대로 #pragma STDC FENV_ACCESS ON를 구현하지 않는 것을 발견 할 수 있습니다. club에 오신 것을 환영합니다.