Библиотека для строгих математических операций с плавающей точкой в.NET

У меня есть алгоритм/вычисление в Java и модульном тесте на него. Модульный тест ожидает результат с некоторой точностью/дельтой. Теперь я портировал алгоритм в.NET и хотел бы использовать тот же модульный тест. Я работаю с двойным типом данных.

Проблема состоит в том, что Java использует strictfp (64 бита) для некоторых операций в Математическом классе. Где, поскольку.NET всегда использует FPU/ЦП (80 битов)..NET более точна и быстрее. Java более предсказуем.

Поскольку мой алгоритм является циклическим и снова использует результаты предыдущего раунда, error/difference/more-precision накапливается слишком большой. Я не полагаюсь на скорость (для модульного теста). И я рад использовать точность.NET в производстве, но я хотел бы проверить реализацию.

Рассмотрите это от JDK


public final class Math {
    public static double atan2(double y, double x) {
    return StrictMath.atan2(y, x); // default impl. delegates to StrictMath
    }
}

Я ищу библиотеку или технику для использования строгого FP в.NET.

Приоритетный комментарий: Я действительно понимаю формат IEEE 754 и то, что число с плавающей точкой не является точным десятичным числом или частью. Никакое Десятичное число, никакой BigInt или BigNumber. Не отвечайте на этот путь, спасибо.

9
задан Pavel Savara 12 January 2010 в 14:34
поделиться

1 ответ

К сожалению, в C # нет способа обеспечить строгость FP, в .Net CLR просто не хватает возможности выполнять вычисления с меньшей точностью, чем это возможно. .

Я думаю, это дает прирост производительности - это не означает, что вам может потребоваться меньшая точность. В этом также нет необходимости - .Net не запускается на виртуальной машине и поэтому не беспокоится о различных процессорах с плавающей запятой.

Но разве strictfp не является необязательным? Могли бы вы выполнить свой Java-код без модификатора strictfp ? Затем он должен использовать тот же механизм с плавающей запятой, что и .Net

. Поэтому вместо того, чтобы заставлять .Net использовать strictfp и проверять, что он выходит с теми же значениями, что и ваш код Java, вы можете заставить Java не используйте strictfp и убедитесь, что он будет таким же, как код .Net.

2
ответ дан 3 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: