초기화(C) 시 0.0f의 의미는 무엇입니까?
나는 사람들이 float 변수를 다음과 같이 초기화하는 코드를 본 적이 있습니다.
float num = 0.0f;
이 작업과 아래의 작업 사이에 상당한 차이가 있습니까?
float num = 0;
감사합니다.:)
float x = 0에는 int에서 float로 암시적 유형캐스트가 있습니다.
float x = 0.0f에는 이러한 유형 캐스트가 없습니다.
float x = 0.0에는 이중에서 부동으로 암시적 유형 캐스트가 있습니다.
컴파일러에 따라 암묵적 typecast를 사용하려면 컴파일러가 추가 코드를 생성해야 할 수 있습니다.
아마도 그 이유는 그들이 다음과 같은 것을 썼기 때문일 것입니다.
float f = 1 / i; // i an integer
그것을 디버깅한 후, 그들은 항상 올바른 유형을 얻을 수 있을 정도로 리터럴을 장식할 것을 맹세했습니다.
float f = 1.0f / i;
이 경우,.0
분할이 정수 분할이 아닌 부동 소수점인지 확인하는 것입니다.그f
수술을 할 필요가 없기 때문입니다.double
더 많은 구현 가능성이 있을 것으로 예상됩니다.1.0/i
이익이 없는 경우(소프트웨어 플로트 에뮬레이션, 다른 최적화) 훨씬 느릴 것입니다.1.0f
이점이 없는 경우 상당히 느립니다(fp 하드웨어가 있기 때문에 더블이 플로트보다 빠르다면 둘 사이의 변환이 매우 빠르기 때문에 상당한 속도 저하가 발생하지 않습니다).
당신이 문학 작품을 꾸미는 습관이 있다면, 당신은 다음과 같이 쓸 수 있습니다.
float f = 0.0f;
와 정확히 같은 효과가 있음에도 불구하고.float f = 0.0;
또는float f = 0;
.
물론 저자가 개인적으로 이 폭로를 겪은 것은 아닐 수도 있지만, 그들은 그저 그런 다른 사람의 스타일을 물려 받았을 수도 있습니다.
나는 그냥 쓸 것입니다.0
.
R.는 댓글에서 0을 쓰는 것이 당신이 유형을 변경할 때의 이점도 있다고 지적합니다.f
이후에는 리터럴을 업데이트할 필요가 없습니다.할당이 정의와 별개인 경우 다음을 변경합니다.
float f = something
// some time later
f = 0.1f;
대상:
double f = something;
// some time later
f = 0.1f;
아마도 벌레일 겁니다.사용하기 더 좋음0.1
필요한 경우 컴파일러를 잘라내어 부동 상태로 만듭니다.당신은 아마도 사용할 수 있다고 주장할 수 있을 것입니다.float
시간이 아니면 공간에 대한 최적화이며, 플로트와 더블 사이의 차이를 처리해야 하는 부담은 최적화를 수행하는 개발자 비용으로 계산해야 합니다.
같은 유형의 문자 상수를 사용하여 변수를 초기화하는 것은 좋은 방법으로 간주됩니다. 상수,즉 리터럴 .0.0f
보다는 (int다는보▁(는▁than)0
다음 그런 다음 암묵적으로 플로트에 캐스팅됩니다.
니까 0은 0이고 0은 0은 0입니다.float num = 0
정수에서 부동으로 주조해야 합니다.하지만 어쨌든 컴파일러가 이것을 해줄 것이라고 생각합니다.사람들이 사용하는 것 같습니다.0.0f
이것이 부유물이라는 것을 강조하기 위해, 아무도 그것을 정수로 착각하지 않습니다.
'f'는 플로트를 원한다는 것을 나타냅니다.
0은 int입니다.
0f는 플로트입니다.
0.0은 2배입니다.
0.0f는 플로트입니다.
폴 R이 답을 썼습니다.두 번째 예제에는 정수 초기화 값이 있습니다.
항상 초기화 중인 변수와 동일한 유형의 초기화 프로그램을 사용해야 합니다.이렇게 하면 컴파일 시간(이상적으로)이나 실행 시간에 변환하는 것을 피할 수 있습니다(게으른 컴파일러: 하지만 이렇게 게으른 것은 없습니까?).그리고 아마도 더 중요한 것은, 전환이 일반적인 경우에 이상한 일들을 초래할 수 있다는 것입니다.
여기서 변환은 정확하게 예상되는 것을 수행해야 하지만 여전히 좋은 스타일이며 컴파일러 경고를 방지합니다.
초기화 프로세스에 이것을 사용할 이유가 없습니다.그러나 부동 소수점 리터럴과 관련된 작업의 경우 유용합니다.예를 들어,
float a=0.43, b;
b = 0.5*a + 2.56*a*a;
접미사가 없는 부동 소수점 리터럴은 이중으로 간주됩니다.따라서 이 계산에서 "a"는 두 배로 유형 주조되고 RHS 평가의 최종 답변은 두 배가 됩니다.할당 중에 RHS의 이중 값이 플로팅되도록 캐스팅되고 "b"에 할당됩니다.기계에 이중 정밀도 FPU가 없으면 성능이 저하됩니다.이를 방지하고 전체 계산에 float을 사용합니다.접미사가 사용됩니다.예를들면,
float a=0.43, b;
b = 0.5f*a + 2.56f*a*a;
언급URL : https://stackoverflow.com/questions/5199338/what-is-the-significance-of-0-0f-when-initializing-in-c
'programing' 카테고리의 다른 글
Python에서 Import 문의 a.는 무엇을 의미합니까? (0) | 2023.07.13 |
---|---|
기본 문제: 기본 PL/SQL 콘솔 출력? (0) | 2023.07.13 |
커밋을 준비 영역으로 이동하려면 어떻게 해야 합니까? (0) | 2023.07.13 |
TSC(TypeScript Compiler)를 사용하여 Node.js ES6(ESM) 모듈을 해결하는 방법.TSC가 올바른 파일-ext를 내보내지 않습니다. (0) | 2023.07.13 |
T-SQL 스로우 예외 (0) | 2023.07.13 |