2013-05-02 1 views
2

제목에서 알 수 있듯이, 특정 값을 향한 다음 부동 소수점 값을 찾기 위해 C++ 11의 수학 라이브러리가 제공하는 기능이 제공됩니다.C++ 대신 11의 std :: nextafter 및 std :: nexttoward for C++ 03?

(내가해야 할 수도있는) 표준 라이브러리에서 코드를 추출하는 것 외에도 C++ 03 (GCC 4.4.6 사용)을 사용하여이 작업을 수행하는 다른 방법은 없을까요?

답변

2

은 플랫폼 의존적으로, IEEE754 가정 및 모듈의 엔디 언, 당신은 결과에 의해 부동 소수점 정수의 수 증가의 데이터를 저장하고 검색 할 수 있습니다 제로에주의

float input = 3.15; 

uint32_t tmp; 

unsigned char * p = reinterpret_cast<unsigned char *>(&tmp); 
unsigned char * q = reinterpret_cast<unsigned char *>(&input); 

p[0] = q[0]; p[1] = q[1]; p[2] = q[2]; p[3] = q[3]; // endianness?! 

++tmp; 

q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; q[3] = p[3]; 

return input; 

을, NaN을하고 무한, 물론.

+1

음수 float을 감소 시키려면 부호없는 정수 표현을 증가시켜야합니다. –

+1

[여기에이 접근법을 논의하는 블로그 게시물이 있습니다.] (http://randomascii.wordpress.com/2012/01/23/stupid-float-tricks-2/) – BoBTFish

+0

일반 std :: copy의 문제점 p, p + 4, q)'? 또는, 정렬이 같다고 가정하면,'reinterpret_cast (input) ++;' – MSalters