• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

2.5 literal이 float로 간주되는 경우

23.05.14 13:35 작성 조회수 136

1

12분 30초 정도에 선생님께서

int main() {

using namespace std;

float f(3.141592f);

double d;

long double ld;

return 0; } 에서

여기서 float면 3.141592뒤에 꼭 f를 붙여야 하는데 f를 안 붙이면 안의 literal은 double인데 C언어 또는 C++에서는 double을 float로 강제로 바꾼다 라고 하셨습니다.

여기서 좀 헷갈립니다...

저는 지금까지 float면 f를 확실하게 붙여야 하고, 붙이지 않으면 double로 간주된다고 알고 있었습니다.

  1. 그런데 선생님 말씀대로라면, 앞의 type를 float로 적은 상황에서, 뒤의 수는 f를 붙이지 않아도 C++에서 자동으로 float로 바꾼다고 하셨으니 f가 있든 없든 float로 컴파일되는 게 아닌가요?ㅠ

 

  1. 뒤의 literal이 double이 되려면, 앞의 type을 double d(3.141592) 이런 식으로 적지 않는 이상 방법이 없다는 걸로 이해하면 될까요?ㅠ

 

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.05.14

안녕하세요, 답변 도우미 Soobak 입니다.

변수의 자료형을 놓치고 계신 것 같습니다.

float f (3.141592); 에서 변수 f 의 자료형이 float 이기 때문에 컴파일러가 double 로 표현된 리터럴 3.141592float 으로 형변환해주는 것입니다. 👍

나그네님의 프로필

나그네

질문자

2023.05.15

그럼 float f(3.141592f)과 float f(3.141592) 의 차이는 f가 있고 없고의 차이인데, 컴파일러가 f가 없어도 자동으로 float로 바꾸는 것이라면, f를 붙이는 의미가 없지 않나요?

Soobak님의 프로필

Soobak

2023.05.16

안녕하세요, 답변 도우미 Soobak 입니다.

일단 코드의 가독성을 향상시키고, 데이터 손실의 가능성 및 컴파일러 경고를 방지하기 위해서 f 를 붙이는 것이 의미가 있다고 생각하시는 것이 적절한 것 같습니다.

f 를 붙이면, 해당 숫자를 float 으로 처리하려고 함을 명확히 보여주는 표시입니다. 따라서, 코드를 읽는 사람에게 의도를 명확히 전달할 수 있습니다.

또한, double 은 일반적으로 float 보다 더 넓은 정밀도의 숫자 표현을 보장하므로, 특정 숫자는 double 에서 float 으로 형 변환시 데이터 손상이 일어날 수도 있습니다. 따라서, 컴파일러의 경고 수준 설정에 따라서 명시적으로 f 를 사용하지 않으면 경고 메세지가 발생할 수도 있습니다.