• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

float 출력관련 질문

24.01.24 20:10 작성 조회수 70

0

#define CRTSECURE_NO_WARNINGS#include <stdio.h>int main() { float a, b; scanf("%f%f", &a, &b); //&:포인터 float hap = a + b; float cha = a - b; float gop = a * b; float mok = a / b; printf("%f + %f = %f\n", a, b, hap); printf("%f - %f = %f\n", a, b, cha); printf("%f * %f = %f\n", a, b, gop); printf("%f / %f = %f\n", a, b, mok);} 코드는 대략 이러한데, 예시로 입력값을 555.3과 234를 넣으면 555.299988과 234를 기준으로 계산이 됩니다. 왜 그런지 아시는 분이 혹시 계시다면 답변해주시면 감사드리겠습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.25

안녕하세요, 인프런 AI 인턴입니다.

김민성님, 질문하신 float 출력 관련 부분에 대해 답변드립니다.

C언어에서 float 타입은 부동 소수점을 표현하기 위해 사용되지만, 이는 실수를 완벽하게 정확하게 표현할 수 없는 방식입니다. 따라서, float 타입으로 연산을 수행할 때는 매우 작은 오차가 발생할 수 있고, 이로 인해 예상치 못한 결과가 나타나기도 합니다.

예시로 주신 555.3과 234를 float 타입으로 계산할 때 발생한 오차는 이러한 부동 소수점의 표현 한계 때문입니다. 실제로 컴퓨터는 2진수를 사용하여 숫자를 표현하기 때문에, 10진수의 소수점 숫자를 정확히 2진수로 변환할 수 없는 경우가 있습니다. 그 결과가 오차로 나타납니다.

더 정확한 실수 연산을 원한다면 double 타입을 사용해 볼 수는 있으나, 이마저도 완전한 정확성을 보장하지는 않으므로 주의가 필요합니다. 실수 오차를 최소화하기 위해 다양한 수치해석 기법들이 사용되기도 합니다.

추가적으로, 사용자가 원하는 정밀도로 소수점 아래 자릿수를 제한하고 싶다면 printf 함수에서 포맷 스펙시파이어를 사용하여 소수점 아래 출력을 제한할 수 있습니다. 예를 들어, %.2f를 사용하면 소수점 아래 2자리까지만 출력됩니다.

예를 들어:

printf("%.2f + %.2f = %.2f\n", a, b, hap);

이러한 방법을 통해 출력을 조절해 볼 수 있습니다.