inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 되새기는 C 프로그래밍

C언어 부동소수점 오차 관련해서 실제 실무적으로 해결하셨던 방법이 있을까요?

해결된 질문

1749

도도레미

작성한 질문수 1

0

안녕하세요. C언어로 개발을 하고 있는 왕초보 개발자입니다.

최근 부동소수점 관련해서 문제에 직면하게 되어서 C언어 개발자 분들은 혹시 실무적으로 어떻게 해결하셨는지 궁금합니다.

제가 맡은 프로그램은 예전에는 해당 값이 소수점이 발생할 일이 없어서 인지 부동소수점 문제점 까지 크게 고려하지 않고 작성된 것으로 보입니다. 그리고 이전 개발자들도 다 퇴사하여 없고 저 혼자 해당 프로그램을 맡아 주변에 물어볼 곳 없어 여기에 질문하게 되었습니다ㅠㅠ

문제점에 대해 간단히 말씀 드리면... 두서없이 급하게 작성해서 코드와 문제점이 발생했던 숫자는 정확하지 않을 수 있습니다.

double a,b,c,d;

a = 17772.8;

b = 2338.2;

c = modf(a+b, &d);

a+b값이 20111 가 나오거나 아니면 오차로 더 큰 수면 그나마 다행이겠지만...

modf 함수를 사용하여 실수부만 사용하고 있습니다.

실제로 합산 값을 찍어보니 부동소수점 문제가 발생해서 20110.99999999 값을 갖고 있어서

소수 부분 제거 후 20110 의 값만 남게 되어서 값이 정확하지 않아 문제가 발생했습니다.

관련해서 해결해보신분 ㅠㅠㅠㅠ 도움주시면 정말 감사하겠습니다.

c kernel secure-coding 부동소수점 pro*c modf

답변 1

0

널널한 개발자

일단 OS + CPU를 사용하며 컴파일러는 어떤 것(정확한 버전 포함)을 사용했는지가 중요하겠습니다. 참고로 제가 Win10 + Intel i7(2020년 구매) + Visual Studio 2022 community 버전으로 확인했을 때는 관련 문제가 발생하지 않고 20111이 정확히 출력됐습니다. 참고하시기 바랍니다.

image

병행성 제어

0

53

2

질문이 있습니다(강의와 거의 상관이 없는)

0

79

2

컴파일러 서적 질문입니다

0

165

1

코드생성 및 최적화 질문입니다

0

168

1

Hex Editor를 이용한 다국어 번역 관련 질문입니다

0

213

2

큐의 배열을 넘겨도 정상작동합니다

0

159

2

캐너리비트에 관하여 질문

0

220

3

상수화된 문자열에 질문있습니다

0

176

1

함수 호출 매개변수 전달에 대한 질문 드립니다.

0

195

1

단항 증감 연산에 따른 다른 접근에 대한 질문있습니다.

0

212

2

함수호출 규약 종류에 따른 장단점 여부

0

235

2

정적라이브러리 링크 오류

0

227

1

const char *를 char*에 초기화할때의 컴파일 에러 처리 방식 문의

0

359

2

pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.

0

261

2

비선형 자료구조

0

314

1

자료 구조 공부 후에

0

357

1

강의자료 관련

0

254

1

마지막에 말씀하신 부분 질문드립니다.

0

216

1

문자열 관련 질문 드립니다

0

293

1

라이브러리

0

276

1

부동소수점

0

397

1

왜 변수 주소 사이에 offset이 있는 건가요?

0

307

2

stack 쌓는 순서

0

515

1

함수호출이랑 쓰레드

0

415

1