부동 값에 접미사 'f'를 사용하는 이유는 무엇입니까?
C에 있는 이 두 변수의 차이는 무엇인지 궁금합니다.
float price = 3.00;
그리고.
float price = 3.00f;
접미사의 용도는 무엇입니까?f
이 경우?
3.00
로 해석됩니다.double
와는 반대로3.00f
컴파일러에 의해 컴파일러가?float
.
그f
suffix는 컴파일러에게 단순히 어떤 것이 어떤 것인지 알려준다.float
그리고 어떤 것이double
.
'MSDN(C++)' 참조
고정되지 않은 부동소수점 리터럴은 2배이고 반올림은 작은 리터럴이라도 반올림하여 부동소수점 리터럴과 2배의 값을 취할 수 있음을 의미합니다.이것은, 다음의 예에서 확인할 수 있습니다.
float f=0.67;
if(f == 0.67)
printf("yes");
else
printf("no");
이렇게 하면 출력됩니다.no
,왜냐면0.67
는 부동으로 반올림했을 때와 2배로 반올림했을 때의 값이 다릅니다.한편, 다음과 같습니다.
float f=0.67;
if(f == 0.67f)
printf("yes");
else
printf("no");
출력yes
.
접미사는 대문자 또는 소문자를 사용하여 지정할 수 있습니다.
이것도 시도해 보세요.
printf(" %u %u\n", sizeof(.67f), sizeof(.67));
@codepade 체크
이미 말한 내용과 더불어 1.0 대 1.0f를 추적하는 것이 많은 사람들이 알고 있는 것보다 더 중요합니다.코드를 이렇게 쓰면:
float x;
...
float y = x * 2.0;
2.0은 더블이기 때문에 x는 더블로 승격됩니다.컴파일러는 프로모션을 최적화할 수 없습니다.그렇지 않으면 C 표준을 위반하게 됩니다.계산은 2배의 정밀도로 이루어지며, 결과는 암묵적으로 플로트로 잘립니다.즉, 2.0f 또는2를 썼을 때보다 계산이 느립니다(단, 더 정확합니다).
2라고 쓰면 상수는 int 타입으로 플로트로 승격되어 "플로트 정밀도"로 계산됩니다.훌륭한 컴파일러라면 이 프로모션에 대해 경고할 것입니다.
"일반 산술 변환" 규칙에 대한 자세한 내용은 여기를 참조하십시오.
http://msdn.microsoft.com/en-us/library/3t4w2bkb%28v=vs.80%29.aspx
부동 데이터 유형과 이중 데이터 유형 간의 비교 조합을 몇 가지 추가합니다.
int main()
{
// Double type constant(3.14) converts to Float type by
// truncating it's bits representation
float a = 3.14;
// Problem: float type 'a' promotes to double type and the value
// of 'a' depends on how many bits added to represent it.
if(a == 3.14)
std::cout<<"a: Equal"<<std::endl;
else
std::cout<<"a: Not Equal"<<std::endl;
float b = 3.14f; // No type conversion
if(b == 3.14) // Problem: Float to Double conversion
std::cout<<"b: Equal"<<std::endl;
else
std::cout<<"b: Not Equal"<<std::endl;
float c = 3.14; // Double to Float conversion (OK even though is not a good practice )
if(c == 3.14f) // No type conversion
std::cout<<"c: Equal"<<std::endl; // OK
else
std::cout<<"c: Not Equal"<<std::endl;
float d = 3.14f;
if(d == 3.14f)
std::cout<<"d: Equal"<<std::endl; // OK
else
std::cout<<"d: Not Equal"<<std::endl;
return 0;
}
출력:
a: Not Equal
b: Not Equal
c: Equal
d: Equal
3.00은 더블, 3.00f는 플로트입니다.
컴파일러는 이중 상수를 플로트로 변환하기 때문에 차이는 중요하지 않은 경우가 많습니다.단, 다음 사항을 고려하십시오.
template<class T> T min(T a, T b)
{
return (a < b) ? a : b;
}
float x = min(3.0f, 2.0f); // will compile
x = min(3.0f, 2); // compiler cannot deduce T type
x = min(3.0f, 2.0); // compiler cannot deduce T type
이는 부동소수점 숫자 리터럴의 기본 유형인 3.00 문자가 부동소수점이 아닌 이중이기 때문입니다.이것을 컴파일 하려면 , 서픽스 f(또는 F)를 추가할 필요가 있습니다.
언급URL : https://stackoverflow.com/questions/5026570/whats-the-use-of-suffix-f-on-float-value
'programing' 카테고리의 다른 글
사전에 값이 있는지 확인하는 방법 (0) | 2022.10.19 |
---|---|
"없음"과 "== 없음"의 차이점은 무엇입니까? (0) | 2022.10.19 |
함수가 발신자가 인식하는 일부 인수를 변경할 수 있지만 다른 인수는 변경할 수 없는 이유는 무엇입니까? (0) | 2022.10.19 |
(C#과 같이) PHP로 스태틱클래스를 만들 수 있습니까? (0) | 2022.10.19 |
Python을 사용하여 Selenium에서 드롭다운 메뉴 값을 선택하는 방법은 무엇입니까? (0) | 2022.10.19 |