Я создаю научное приложение, которое выполняет множество вычислений в Java и C, и точность имеет решающее значение. В базе данных Oracle не происходит никакого перебора чисел (он просто используется для хранения переменных между математическими вычислениями).
Я использовал тип данных двойной точности для всех моих переменных Java и C, который в значительной степени основан на IEEE 754. Итак, данные, записанные в базу данных и затем считанные из базы данных, будут как из точные типы данных в C или Java.
Что бы вы порекомендовали использовать для хранения данных двойного разрешения в Oracle - NUMBER или BINARY DOUBLE?
Например, допустим, у меня есть переменная с именем X_Java
, которую я записываю в базу данных как переменная X_DB
как BINARY DOUBLE. Если бы я прочитал эти данные обратно в Java из базы данных и сохранил их в переменной X_Java2
, было бы X_Java
точно совпадает с X_Java2
?
Как все изменится. Я храню X_DB
в базе данных как НОМЕР?
ОБНОВЛЕНИЕ 1: обратите внимание, что мой критерий "точности" - насколько близко число, считываемое из базы данных, к числу, которое было доступно до записи в базу данных.
С одной стороны, я думаю, что если число, доступное до записи в базу данных, основано на IEEE 754, то тип данных, используемый для хранения этого значения в базе данных, должен быть точным соответствием, если этот тип данных был также основано на IEEE 754.
С другой стороны, поскольку 64-битное число (двойная точность) может точно хранить только до 16 (иногда 17) цифр точности, то сохранение в качестве НОМЕРА в базе данных с 38 цифрами точности должно точно отображаться из и удвоить точность. Недостатком является то, что тип данных NUMBER не может хранить такие большие (или малые) значения, как BINARY DOUBLE.
Итак, мои посты.