2011-10-08 1 views
3

대부분 float 인수를 요구하는 Box2D 라이브러리를 사용하고 있기 때문에 물어 봅니다. 0.00f 형식을 사용하는 많은 예제 코드를 볼 수 있지만 실제로 오래된 차이점이 있는지 잘 모르겠습니다. 0.00. 나중에 f을 추가하지 않음으로써 나 자신을 해칠 수 있습니까? 속도가 느껴지나요? 어떤 사람들은 f 가사가 필요할 때 어떤 종류의 의미가 있습니까?"2.00"과 "2.00f"간에 기능상의 차이가 있습니까?

tl; dr? 0.00 대신 0.00f를 사용해야하는 이유는 무엇입니까?

+1

아마도 [이 질문] (http://stackoverflow.com/q/7662109/743214)을보고 싶을 것입니다. –

+0

또는 this http://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-c-c/2392409#2392409 – epatel

답변

6

접미어는 배정 밀도 리터럴 대신 단 정밀도 (부동 소수점) 리터럴을 만듭니다. 이것은 대개 64 비트 부동 소수점 대신 32 비트를 의미합니다.

부동 소수점 상수의 기본값은 double입니다. 접미어 f 또는 l (또는 F 또는 L - 접미어는 대소 문자를 구분하지 않음)을 사용하면 상수는 각각 float 또는 long double로 지정할 수 있습니다.

http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=VS.100).aspx

+6

'상수'보다 '리터럴'이 더 적합한 것일 수 있습니다. * 리터럴 *의 유형이 문제의 대상입니다. –

+2

''float'는 반드시 크기가'32 비트 '는 아닙니다. 이것은 구현에 따라 정의됩니다. – Nawaz

+0

고마워, 당신 말이 맞아. "문학적"이 문맥에서 더 적절해 보인다. 고정 비트 크기 부분도. – CodesInChaos

2

2.00의 유형 double이고 2.00f의 종류 float이다.

접미어 f은 리터럴 2.00을 부동 소수점 유형으로 변환하여 정밀도를 떨어 뜨립니다. 그렇지 않으면 리터럴은 double 유형입니다.

4

float에 할당하면 아무런 차이가 없습니다. 은 모든 숫자 유형에서 정확하고 올바르게 나타낼 수 있기 때문에 전혀 차이가 없습니다.

중요한 차이점은 2.0위한 double, float2.0f2위한 int 인 리터럴이다. 따라서 인수 유형 공제에 차이가 있습니다.

void foo(int) { cure_cancer(); }; 
void foo(float) { wipe_hard_disk(); } 
void foo(double) { exit(0); } 

foo(2); 
foo(2.0f); 
foo(2.0); 
2

기본 가정은 double입니다. f 접미 부로 지정하면 float

5

과 차이가 있습니다. 2.00double 유형이고 2.00f 유형은 float 유형입니다. 정확한 정밀도와 형식 의미는 플랫폼에 따라 다릅니다. 하나를 다른 것보다 많이 사용하는 것이 코드에서 실제적인 차이를 만들지 여부는 사용 된 컨텍스트에 따라 다릅니다.

(기본 숫자 유형의) 명시 적 유형 변수의 초기화 프로그램은 아무런 차이가 없지만 함수 호출에서 사용될 때 잠재적으로 과부하 또는 템플리트 특수화가 사용되는 데 영향을 줄 수 있습니다. auto 타입 지시자 또는 decltype 지정자의 표현으로 선언되는 오브젝트의 종류가 영향을받을를 사용 선언 이니셜 라이저로서 사용 분명히

.

decltype(2.00) x = 2.00f; // confusing 
decltype(2.00f) y = 2.00; // also confusing 

auto d = 2.00; 
auto f = 2.00f; 
관련 문제