2016-06-20 2 views
1

문자열 값 "15.0000000000000001"과 "15"를 비교하는 함수를 작성해야하며 MathNet을 사용하고 있습니다. MathNet.Symbolics.Expression.Real을 사용하면 double 만 사용할 수 있습니다. 나는MathNet 실제 배정 문제

Expression valOne = Expression.Real(Double.Parse("15.0000000000000001")); 
Expression valTwo = Expression.Real(Double.Parse("15")); 

valOne.Equals(valTwo); 

다음 작업을 수행 할 때 위 평가하여는 진수가 두 배로 의미이며 스토리지 제한이 후 나는 공의를 이해 15.0000000000000001 반환 15 true.Double.Parse합니다.

아무도 도와 줄 수 있습니까?

+0

18 자리 절대 정밀도가 필요한 곳에서 어떤 종류의 계산 또는 비교를하고 있습니까? –

+0

관점에서 볼 때 - [지구상에 약 7.5e18 개의 곡물이 있습니다] (http://www.npr.org/sections/krulwich/2012/09/17/161096233). 열 곡물로 계산하면 정말 중요하니? –

답변

2

대개의 경우, 플로트는 연속 된 14 자리와 10의 거듭 제곱을 가질 수 있습니다. 12.3456789를 1.23456789로 저장하고 1의 힘을 얻습니다. 두 개의 숫자를 함께 사용하면 저장된 숫자를 얻을 수 있습니다.

예에서 첫 번째 1에서 마지막 1까지 18 자리의 스팬이 있습니다. 플로트는 사용 가능한 공간에 플로팅을 저장할 수 없으므로 최하위 비트 -이 경우 최종 1을 삭제합니다. 예제의 두 숫자가 일치해야합니다.

그러나 12.3456789와 12.3456789를 비교하면 동일하지 않습니다.

내가 언급 한 14 자리 10 진수는 엄지 손가락의 규칙입니다. 해당 숫자의 값에 따라 더 적을 수도 있습니다.

예 : 이것은 수레가 정확하지 않다는 것을 의미합니다. 근사값입니다.