Я создаю научное приложение, которое выполняет много операций с числами на 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
в базе данных как ЧИСЛО?
UPDATE 1: Обратите внимание, что мой критерий "точности" - это то, насколько близко число, считанное ИЗ базы данных, к числу, которое было доступно до записи в базу данных.
С одной стороны, я думаю, что если число, доступное до записи в базу данных, основано на IEEE 754, то тип данных, используемый для хранения этого значения внутри базы данных, должен быть точным совпадением, если этот тип данных также основан на IEEE 754.
С другой стороны, поскольку 64-битное число (двойной точности) может точно хранить только 16 (иногда 17) цифр точности, то хранение в базе данных в виде ЧИСЛА с 38 цифрами точности должно точно отображаться от и до двойной точности. Одним из недостатков является то, что тип данных NUMBER не может хранить такие большие (или такие маленькие) значения, как BINARY DOUBLE.
Таким образом, мой постинг.