2012-08-07 3 views
1

저는 C++에서 부동 소수점 상수를 입력하는 올바른 방법을 알지 못하고 있습니다.부동 소수점 상수를 쓰는 방법

내가 2^-52를 원한다면 무엇을 써야합니까? 그리고 floft가있는 < <은 무엇입니까? 맞습니까?

const double pres = 1>>52 
+0

부동의 "가수"부분은 정의되지 않은 동작입니다 이동하는 노동 조합을 사용하여. –

+0

여기에 답장 됨 (중복?) http://stackoverflow.com/questions/11806581/forms-of-constants-for-high-performance-addition-and-multiplication-for-double/11806593#11806593 –

+0

아니요 - 그게 속임수가 아니라 - 이것과 같은 상수들에 대해서는 노조와 비트 바이올린보다 더 나은 해결책이 있습니다. –

답변

5

보인다. 이 경우 마법 상수를 사용하지 마십시오. 대신 당신은이를 사용할 수 있습니다

const double pres = std::numeric_limits<double>::epsilon(); 
+0

위대한, 이것은 정확히 내가 필요로하는 상수입니다. – Enjolras

3

이에 대한 hex float 표현을 사용할 수 있습니다 : 당신이 정말로 double 표현의 정밀도를 원하는처럼

const double pres = 0x1p-52; 
+0

16 진수 수레는 C에 있지만 C++에는 없습니다. –

+0

오 - 그게 짜증나. - 나는 정말로 알아 차리지 못했다. 아마도 g ++과 다른 컴파일러가 C++에서 이것을 확장으로 지원 했을까? –

+0

예, g ++에서 지원한다고 생각하지만 MSVC는 지원하지 않습니다. –

0
#include<math.h> 
double pres = 1/pow(2,52); 
+0

gcc가 이것을 정적으로 계산합니까? – Enjolras

+0

@Enjolras 가능성은 있습니다. 하지만 그건 보장되지 않습니다. –