2016-06-20 7 views
0

Scilab 코드에서 C++로 프로그램을 변환하는 과정에 있으며 Scilab에서 제작 한 결과를 유지 관리해야합니다.다른 언어로 프로그램을 복제하려고하는 경우. 더 정밀도를 사용하는 것이 현명하지 않습니까?

필자는 Scilab이 IEEE 754 배정도를 사용하고 C++이 (꼭 그래도 안되지만) 유사한 방식으로 구현된다는 것을 알고 있습니다.

은 그 다음 높은 정밀도를 사용하는 것은 좋지 않다 (예를 들어long double) C에서 ++ 내가 정확히 Scilab의 결과와 일치하는 것을 시도하고 있다면?

: Scilab 사용 ++ C 반면에 0.1234가되도록 숫자를 계산하는 긴 수가 0.12345 배가 될 것이다 가능한가. 따라서 잠재적으로 두 프로그램을 생성하는 차이를 만들 수 있습니다. 결과가 (C++에서 더 정확하지만).

+2

나는 결코 정확하게 * 동일한 결과를 얻지 못할 것이라고 확신합니다. 하지만 너 정말로 필요해? –

+0

@JesperJuhl 기술적으로 말하면, 결과가 정확할 필요는 없습니다. 문제는 프로그램에 많은 루핑이 있고 초기 루프가 아주 작은 부분 (그것이있는 부분)에 의해 종료되면 최종 차이가 중요해진다는 것입니다. –

+0

최종 차이가 중요하다면 프로그램이 내장 된 부동 소수점이 허용하는 것보다 더 높은 정밀도를 필요로하지 않는다는 뜻입니까? – Galik

답변

1

예, 이것은 완전히 가능합니다.

하지만 부동 소수점 숫자는 절대 정확하지 않으므로이를 염두에두고 알고리즘을 설계하고 "반올림 오류"가 잠시 후에 계산을 망칠 수 없도록해야합니다.

주석에서 이미 언급했듯이 : C++ 프로그램이 Scilab 프로그램과 똑같은 결과를 산출 할 것이라고 기대하지 마십시오. 특히 작은 변화에는 그다지 중요하지 않은 경우가 있습니다. 왜 대부분의 수치 시뮬레이션은 "잘못된"결과를 내기 시작하기 전에 어느정도 정확하게 정확합니다.

유용한 조언을 제공하기 위해 C++에는 typedef라는 매우 유용한 옵션이 있습니다. typedef long double myFloatType과 같은 typedef를 사용하고 계산에는 단지 myFloatType을 사용하십시오. 더 나은 이름을 생각해보십시오. 여기에 사용 된 것에 대해 실제로 알려줍니다!). 그런 다음 한 줄의 코드 만 변경하고 나중에 결과를 비교하여 나중에 쉽게 변경할 수 있습니다.

차이가 큰 경우 더 나은 알고리즘에 대해 생각해 볼 가치가 있습니다.