powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Смысловая нагрузка идентификатора строчки
25 сообщений из 88, страница 3 из 4
Смысловая нагрузка идентификатора строчки
    #40014932
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLВы подумайте: число number хранится как мантисса и экспонента.

"Чо?"

Теперь я просто требую ссылку на доку где такое написано.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014933
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Dimitry Sibiryakov

пропущено...

Ты не поверишь, но number это тип с фиксированной точкой. И тебе ещё многое, очень много
предстоит узнать о загадочном миру компьютеров.


Мне тут как-то неудобно. Ссылкой на доки тыкать не хочется, вы их наверняка читали.

Вы подумайте: число number хранится как мантисса и экспонента. Какие числа хранятся таким способом?

Щас тебя будут бить.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014935
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
Dimitry Sibiryakov & НеофитSQL,

мне всегда казалось, что Number это BCD или ошибаюсь ?

p.s. вроде не "чистое" BCD (т.к. не ровно 4 бита на знак), но арифметика должна быть BCD "подобная". IMHO


Я не знаю, есть ли официальное определение для BCD, имплементации оракла соответствует "неупакованному сотенному формату", где в каждом байте мантиссы лежит одна цифра основания 100.

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

Экспонента (обязательная) закодирована в двоичном формате.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014936
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

НеофитSQLВы подумайте: число number хранится как мантисса и экспонента.

"Чо?"

Теперь я просто требую ссылку на доку где такое написано.


https://docs.oracle.com/cd/A97630_01/appdev.920/a96584/oci03typ.htm

"The first byte is the exponent and is followed by 1 to 20 mantissa bytes."
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014938
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
НеофитSQL
пропущено...


Мне тут как-то неудобно. Ссылкой на доки тыкать не хочется, вы их наверняка читали.

Вы подумайте: число number хранится как мантисса и экспонента. Какие числа хранятся таким способом?

Щас тебя будут бить.


"В чем сила, брат?"
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014947
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
mayton
пропущено...

Щас тебя будут бить.


"В чем сила, брат?"

Давай начнем от Адама и Евы. Ты знаешь почему существует
разделение на научные типы данных и финансовые?
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014983
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Это до ействительно похоже на неупакованный BCD, где в каждом байте содержится одна цифра основания 10, обладает многими свойствами BCD и вычисления также похожи.

Разницу с decimal128 ( IEEE 754-2008 ) указать сумеете?
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40014986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL"The first byte is the exponent and is followed by 1 to 20 mantissa bytes."

Действительно, они назвали scale мантиссой. Ок...

Тем не менее это не отменяет факта, что number это таки scaled integer, а не floating-point.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015028
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
что number это таки scaled integer, а не floating-point.

Number - классический floating point с десятичной степенью, decimal128.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015038
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, откуда ты взял связь между NUMBER и decimal128 ?

Последний даже по диапазону целой части не покрывает возможности NUMBER.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015045
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
andrey_anonymous, откуда ты взял связь между NUMBER и decimal128 ?

Последний даже по диапазону целой части не покрывает возможности NUMBER.


Table 3.7—Extended format parameters for floating-point numbers

Ну и структура какбэ намекает :)
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015058
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Number - классический floating point с десятичной степенью, decimal128 *

* а-ля decimal128 - очепятко, вводящее в заблуждение, сорри.
Тут надо пояснить, что oracle number появился немного раньше IEEE 754-2008 и не может в точности ему соответствовать.
Принцип, однако, тот же.
Нормализованная BCD-мантиса, основание степени - 10.
Из заметных отличий - мантисса переменной длины, сложности с поддержкой NaN и +-inf
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015066
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
НеофитSQL
пропущено...


"В чем сила, брат?"

Давай начнем от Адама и Евы. Ты знаешь почему существует
разделение на научные типы данных и финансовые?


Я не знаком с таким терминами, но мне известно что number считается удобым для финансовых вычислений из-за точного представления десятичных дробей.

NASDAQ такими глупостями не пользуется, у них в протоколе все цены целые, просто не в долларах а в базовых точках. (Basis points, надеюсь правильно перевел).
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015067
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
НеофитSQL
Это до ействительно похоже на неупакованный BCD, где в каждом байте содержится одна цифра основания 10, обладает многими свойствами BCD и вычисления также похожи.

Разницу с decimal128 ( IEEE 754-2008 ) указать сумеете?


Я не встречался раньше с форматом decimal-128, судя по названию он фиксированной длины. Это наверное одна из разниц.

Спасибо за ссылку, почитаю вечером.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... ну почти. Если 128 это длина разрядной сетки. И мы берем целое типа регистра SSE
(который имеет точно длину 128 бит). То.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Разрядная сетка NUMBER(38) максимальное значение.
scala> BigInt(10).pow(39) - 1
res17: scala.math.BigInt = 999999999999999999999999999999999999999

scala>

// Разрядная сетка 1 регистра SSE 
// Тут уже меньше.
scala> BigInt(2).pow(128)
res14: scala.math.BigInt = 340282366920938463463374607431768211456

// Заберем еще 1 бит для признака знака
scala> BigInt(2).pow(127)
res15: scala.math.BigInt = 170141183460469231731687303715884105728
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015070
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

НеофитSQL"The first byte is the exponent and is followed by 1 to 20 mantissa bytes."

Действительно, они назвали scale мантиссой. Ок...

Тем не менее это не отменяет факта, что number это таки scaled integer, а не floating-point.


> scaled integer

Не знаком с таким термином. Надеюсь, не придумали?

С другой стороны, Оракл пишет:

"Specify a floating-point number using the following form:

NUMBER "
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015073
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous

Из заметных отличий - мантисса переменной длины, сложности с поддержкой NaN и +-inf


Я не знаю почему oracle решил не поддерживать NaN для типа number, но -+ бесконечность они пока ещё поддерживают, и арифметику с ними исполняют верно, даже печатают эти значения как следует, по крайней мере в 11.2
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015079
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Хм... ну почти. Если 128 это длина разрядной сетки. И мы берем целое типа регистра SSE
(который имеет точно длину 128 бит). То.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Разрядная сетка NUMBER(38) максимальное значение.
scala> BigInt(10).pow(39) - 1
res17: scala.math.BigInt = 999999999999999999999999999999999999999

scala>

// Разрядная сетка 1 регистра SSE 
// Тут уже меньше.
scala> BigInt(2).pow(128)
res14: scala.math.BigInt = 340282366920938463463374607431768211456

// Заберем еще 1 бит для признака знака
scala> BigInt(2).pow(127)
res15: scala.math.BigInt = 170141183460469231731687303715884105728



У вас ошибка в первой строчке. 38 десятичных цифр это примерно 126.2 бита. В 127 бит влезает.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015086
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тебе непонятно в моих расчетах? Все - в целых числах. Можешь проверить на бумажке.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015089
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Что тебе непонятно в моих расчетах? Все - в целых числах. Можешь проверить на бумажке.


Off by one

> BigInt(10).pow(39) - 1

Там надо

BigInt(10).pow(38) - 1
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015132
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж быть занудой, то надо брать 40, ибо внутренне мантисса может занимать до 20 байт (и даже часто занимает)
Oracle гарантирует точность в 38 знаков, но для обеспечения этой гарантии использует 39 знак, т.е. 20 байт мантиссы, а там уже место и для 40 знака есть
И при хранении он точно также может использовать (да и использует) 40 знаков
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015138
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
Если уж быть занудой, то надо брать 40, ибо внутренне мантисса может занимать до 20 байт (и даже часто занимает)
Oracle гарантирует точность в 38 знаков, но для обеспечения этой гарантии использует 39 знак, т.е. 20 байт мантиссы, а там уже место и для 40 знака есть
И при хранении он точно также может использовать (да и использует) 40 знаков


Это так, мантисса может занимать до 20 байт памяти. Ее хватает для представления 38 цифр, т.к. 20й байт содержит сомнительные данные, которые не отображаются.

38 цифр (сомнительный довесок не в счёт) помещаются в 127 бит, о чем собственно и была речь.

Разве не так?
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015139
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
20й байт содержит сомнительные данные, которые не отображаются.
И ты это проверил?
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015169
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Если уж быть занудой, то надо брать 40, ибо внутренне мантисса может занимать до 20 байт (и даже часто занимает)
Oracle гарантирует точность в 38 знаков, но для обеспечения этой гарантии использует 39 знак, т.е. 20 байт мантиссы, а там уже место и для 40 знака есть
И при хранении он точно также может использовать (да и использует) 40 знаков


в блоке (на диске хранит) 39-40-й знак?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Внутренний числовой формат

        Числовые данные хранятся в  формате переменной длины, начиная  с
        байта,  содержащего  степень  числа  и  знак,  и  до 20 байт для
        хранения  мантиссы.   (Однако  лишь  38  цифр точны.)  Ведущие и
        хвостовые  нули  не  хранятся.   Например,  число 412 хранится в
        формате, аналогичном  4.12*10**2, с  одним байтом  на показатель
        степени (2) и тремя байтами  на три значащие цифры мантиссы  (4,
        1, 2).

        Приняв  это  во  внимание,  мы  можем  рассчитать размер столбца
        данных для конкретного числового значения данных NUMBER(p),  где
        p - точность данного  значения (масштаб не имеет  значения), пос
        следующей формуле:






                                                        Типы данных  6-5


                1 байт            (показатель степени)
                FLOOR(p/2)+1 байт (мантисса)
              + 1 байт            (только для отрицательных чисел,
                                   у которых число значащих цифр
                                   меньше 38)
            -----------------------
            общее число байт данных

        Ноль, а также плюс  и минус бесконечность (которые  генерируются
        только при импорте  из базы данных  ORACLE версии 5)  хранятся в
        виде  уникальных  представлений;  ноль  и  минус   бесконечность
        занимают по одному байту, плюс бесконечность - два байта.


......
stax
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015179
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ты тоже это не проверил?
Или дока от 7-ки для тебя единственный учебник?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> create table t2(b number);

Table created.

SQL> insert into t2 select 1234567890123456789012345678901234567894 a from dual;

1 row created.

SQL> select dump(b) from t2;

DUMP(B)
----------------------------------------------------------------------------------
Typ=2 Len=21: 212,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79,95

Насколько помню я 8-ке было так же
Да, создать поле точностью больше 38 нельзя, но про 20 байт, четное/нечетное количество знаков было еще на сайте у Steave Adams, по материалам 7-ки
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 3 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Смысловая нагрузка идентификатора строчки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]