C(++) 동적배열활용 연산중 간간한(?) 요류
요즘 혼자 안되는 실력으로 C(++)로 이런저런 삽질하고 있습니다. 파이(Pi)값 한 천만자리 계산해보겠다고, 다른 수치계산 라이브러리 안빌리고 char 배열의 형태로 숫자 정의해서 사칙연산부터 무한급수를 이용한 초월함수까지 하나하나 정의해나가려는 계획...이 있었으나, 덧셈뺄셈 구현하는데 며칠째 헤매고 있습니다. 어떻게든 혼자 해결보겠다고 밤까지 다 샜는데 아무리 코드를 읽어도 답이 안나옵니다.. (솔직히 더 열심히 읽어보고싶지도않아요 ㅠ).
수치계산용으로 실제 써먹진 못하겠으나 99% 이상 정확도는 나오는거 같애요. 거의 다 맞는데 1000번이상 테스트 돌려보면 꼭 몇개씩 깨지는 문자가 출력됩니다. 결과값을 텍스트 파일로 만들어서 매스매티카로 읽어들인다음 실제계산이 맞는지 검증을 해야하는데 자꾸 깨진문자때문에 골치가 아프네요. 남은 1%를 반드시 채워야하는데 도와주시면 정말 감사하겠습니다.
코드는 C++11의 람다식과 같은 편리한 부가기능을 조금 활용한 사실상의 C언어 입니다. STL, vector, template, OOP, 이런건 쓸줄모릅니다 ㅠ.
코드는 컴파일용 배치파일과 결과물까지 압축해서 첨부파일로 올렸습니다. 배치파일작성을 통해서 컴파일을 하고 있는데 혹시 옵션을 잘못지정한건가 싶기도 하고요.. 그리고 데이타저장용 텍스트 파일도 같이 넣었습니다, 끝쯤에 보면 깨진문자가 보일겁니다.
제 코딩실력이 아직 초보수준이기때문에 코딩과 관련된 어떤 지적이라도 달게 받겠습니다.
첨부 | 파일 크기 |
---|---|
![]() | 40.83 KB |
그리고...
깨진문자뿐이아니라, 찾긴 힘들지만 간혹가다 숫자 자릿수 자체가 몇자리 틀리게 인식되는 경우가 있습니다. 왜그러는지는 역시나... 모르겠습니다ㅠ
해결됐습니다!
제가 올린 글에 제가 제가 해결하고 제가 답변하네요...
문제는 printf, sprintf 함수의 불완전함에 있었습니다.
결과로 나온 char배열을 atof함수로 바꿔서 검증해봤을때는 몇번을 돌려도 정확도 100%가 나옵니다.
배열에 제대로 박힌 문자열을 printf함수가 받아서 출력하는데 시스템을 거치는 과정에서 어떤 오류가 생기는것 같네요..
일단 활용하는덴 다행이도 문제없겠습니다.
디버깅하시는 방법을 공부해보시는게
디버깅하시는 방법을 공부해보시는게 좋겠습니다.
올려주신 소스를 -g 옵션 넣고 valgrind로 검사해보면,
이런 오류가 생기네요.
이걸 수정하세요...
대략 살펴본 바로는 getlen 함수가 의도대로 동작하지 않는듯..
댓글 달기