나는 Java의 알고리즘/계산법과 그에 대한 단위 테스트를 가지고 있습니다. 단위 테스트는 약간의 정밀도/델타를 가진 결과를 기대합니다. 이제 저는 algo를 .NET으로 포팅하고 동일한 단위 테스트를 사용하고자합니다. 더블 데이터 형식으로 작업합니다..NET의 엄격한 부동 소수점 수학을위한 라이브러리
문제는 Java가 Math 클래스의 일부 연산에 strictfp (64 비트)를 사용한다는 것입니다. .NET은 항상 FPU/CPU를 사용합니다 (80 비트). .NET은보다 정확하고 빠릅니다. Java는 더 예측 가능합니다.
내 알 고리가 순환적이고 이전 라운드의 결과를 재사용하기 때문에 오류/차이/세부 정밀도가 너무 커집니다. 나는 속도에 의존하지 않는다 (단위 테스트 용). 그리고 프로덕션 환경에서 .NET 정밀도를 사용하게되어 기쁩니다. 그러나 구현을 검증하고 싶습니다.
내가 라이브러리 또는 .NET 엄격한 FP를 사용하는 방법을 찾고 있어요 JDK
public final class Math {
public static double atan2(double y, double x) {
return StrictMath.atan2(y, x); // default impl. delegates to StrictMath
}
}
에서 이것을 고려하십시오.
선매 논평 : IEEE 754 형식과 부동 소수점 숫자가 정확한 십진수 또는 소수가 아니라는 사실을 알고 있습니다. Decimal 없음, BigInt 또는 BigNumber 없음 제발 이런 식으로 대답 하지마. 고마워.
단위 테스트와 생산간에 다른 부동 소수점 연산을 사용하는 경우 단위 테스트가 테스트하는 내용을 이해하지 못합니다. .NET 구현에만 나타나는 오류를 잡을 위험이 있습니까? –
algo/math는 더 큰 통합 테스트의 일부입니다. 그래서 정확히 똑같이 작동하려면이 구성 요소가 필요합니다. 테스트를 위해서 Java와 동일한 (엄격한) 반올림이 있어야하는데 실제로는 덜 정확합니다. –
더 악화 될 수 있습니다. 이 토론에서는 CLR이 80 비트 x87 부동 소수점 또는 64 비트 SSE2를 사용하도록 코드를 컴파일하기로 결정했다고 제안합니다. https://connect.microsoft.com/VisualStudio/feedback/details/276107/provide-access 부동 소수점 컨텍스트 –