Java-фреймворк для чисел - PullRequest
1 голос
/ 27 июня 2011

Я ищу инфраструктуру Java, которая реализует общие математические операции для класса Number (игнорируя атомарные подклассы), с такими методами, как compare(Number a, Number b); add(Number a, Number b);

и следующее правило приведения числового типа:
Если какой-либо из аргументов является десятичным, то результат операции будет десятичным, и если все аргументы являются целыми числами, то результатом операции будет целое число.

Цель этого: У меня есть математический вспомогательный класс, который работает с десятичными и целыми числами. Некоторые операции выполняют много итераций, что приводит к снижению точности, если число является десятичным, но потери точности можно избежать, если операция воздействует на целочисленные аргументы (поскольку нет операций деления). Поэтому я пытаюсь уменьшить потерю точности всякий раз, когда это возможно (для случаев, когда все аргументы целочисленные), используя математическую среду, которая будет вычислять в целочисленной области, когда это возможно.

Другой вопрос - может быть, я ошибаюсь, и при операциях mul / add / sub для десятичных чисел невозможна потеря точности?

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Вы можете использовать класс java.math.BigDecimal для получения неограниченной точности того, что Javadocs называет десятичной арифметикой "произвольной точности".

0 голосов
/ 27 июня 2011

Потеря точности возможна с десятичным сложением, вычитанием и умножением, если у вас нет неограниченного числа цифр.Это верно даже для целых чисел, если целое число превышает максимальный размер целого числа.


Ограниченное число цифр означает неограниченный объем памяти ...

0 голосов
/ 27 июня 2011

Я однажды делал проект в моем университете, чтобы реализовать арифметические операции над всеми видами чисел (включая целые, двойные и т. Д.) Или другими структурами данных (такими как интервалы или комплексные числа и т. Д.)

Единственный способ добиться этого - реализовать класс-оболочку для всех типов:

public interface NumberWrapper<T> {

 public T add(T other);
 public T substract(T other);
 public T sin();
}

Мы не нашли рамки, которая бы нас поддержала.

...