Microsoft Visual C++ 6.0으로 작성된 응용 프로그램이 있습니다. 이제 Visual Studio 2010에서 C#을 사용하여 응용 프로그램을 다시 작성했지만 정밀도 문제로 인해 결과가 일치하지 않습니다. 이러한 정밀도 문제 중 하나는 다음과 같습니다.Visual Studio 2010의 정밀 문제
float a = 1.0f;
float b = 3.0f;
float c = a/b;
이 비주얼 스튜디오 2010에서 실행 C# 코드는 c
값 = 0.333333343
그러나 실행 값 정의에있는 값 뒤에 F를 제거 같은 코드, 비주얼 C++ 6.0 C 값을 제공 준다 = 0.333333
.
아무도 그것을 정렬하고 Visual C++ 6.0뿐만 아니라 Visual Studio에서도 c와 동일한 값을 갖는 방법을 설명 할 수 있습니까 ??
실제로 값은 조사 식 창에서 가져옵니다. Visual Studio의 다른 버전이 부동 소수점 형식 표현과 다를 수 있음을 알게되었습니다. 따라서 시계의 가치가 유용하지 않을 수 있습니다. 이것이 내가 두 비주얼 스튜디오 버전에서 값을 출력 한 이유이며 그 결과는 다음과 같습니다. 비주얼 스튜디오 6.0 Visual C++를 사용하여 언어 그 것이다 0.333333 (여섯 3의)
하지만 비주얼 스튜디오 10는 C# 언어를 사용하여 그 것이다 0.3333333 (일곱 3의)
그래서 누구에 내 C# 프로그램을 만들기 위해 나를 도울 수 비주얼 C++과 같은 결과를 낳는다 ??? (즉, 두 버전 모두에서 동일한 결과를 생성하는 플로팅 작업을 수행 할 수 있습니까?)
당신은 값을 어떻게보고 있습니까? 내부 표현은 (실수로 C#이 장면 뒤에서'double '을 사용하지 않는 한) 동일하지만 사용자에게 숫자를 표시하는 방법이 다르므로 다른 표시 기본값을 쉽게 볼 수 있습니다. –
@MrLister는 C# 4.0 사양에서 4.1.6 절에서 "float에서 이진 연산은"* 적어도 "float"범위와 정밀도 "(강조가 추가됨)를 사용하여 수행됩니다. 따라서 배후의 정밀도는 구현에 따라 결정됩니다. .NET Framework에서는 배후에서 배수를 사용할 수 있습니다. – phoog