powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Смысловая нагрузка идентификатора строчки
13 сообщений из 88, страница 4 из 4
Смысловая нагрузка идентификатора строчки
    #40015189
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
И ты тоже это не проверил?
Или дока от 7-ки для тебя единственный учебник?

за dump забыл, чет сразу в дебри полез (блоки)
на русском токо 7-ка есть (которую я точно читал) и курсы по 9-ке

ожидал что будет округлять на 38-разряде, а ж нет 40-й берет

id p1 p2
1,1/3,1/3
2,1/6,1/6

Код: plsql
1.
2.
3.
4.
5.
6.
7.
  1* select id,p1+p2 a from t2
SQL> /

        ID                                                          A
---------- ----------------------------------------------------------
         1  0.6666666666666666666666666666666666666666000000000000000
         1  0.3333333333333333333333333333333333333334000000000000000



....
stax
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015253
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
НеофитSQL
20й байт содержит сомнительные данные, которые не отображаются.
И ты это проверил?


Когда писал на ночь, не проверил. Подтвердил в документации, и отбросил цифры 39-40 как ненадежные.
С утра проверил, собирался писать поправку.

Поправка: в моих неполных экспериментах с 11.2, все 40 цифр честные как для вычислений, так и для хранений в таблицах.

Например, я помещал в неквалифицированый тип number целые числа возрастающей разрядности, получил ровно 40, не больше не меньше:

Код: plsql
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.
37.
38.
39.
40.
41.
42.
SQL> insert into test values (1234567890123456789012345678901234567, '37');
1 row created.

SQL> insert into test values (12345678901234567890123456789012345678, '38');
1 row created.

SQL> insert into test values (123456789012345678901234567890123456789, '39');
1 row created.

SQL> insert into test values (1234567890123456789012345678901234567890, '40');
1 row created.

SQL> insert into test values (12345678901234567890123456789012345678901, '41');
1 row created.

SQL> insert into test values (123456789012345678901234567890123456789012, '42');
1 row created.

SQL> select to_char(num) from test;

TO_CHAR(NUM)
----------------------------------------
1234567890123456789012345678901234567
12345678901234567890123456789012345678
123456789012345678901234567890123456789
1234567890123456789012345678901234567890
1.2345678901234567890123456789012346E+40
1.2345678901234567890123456789012346E+41

6 rows selected.

SQL> select to_char(num-1e40) from test where text='41';

TO_CHAR(NUM-1E40)
----------------------------------------
2345678901234567890123456789012345678900

SQL> select to_char(num-12e40) from test where text='42';

TO_CHAR(NUM-12E40)
----------------------------------------
3456789012345678901234567890123456789000



Повторяющиеся нули в последних двух строчках обозначают потерю точности после 40 цифр.

Мой вывод: по крайней мере в некоторых ситуациях Оракл способен точно хранить 40-значную десятичную мантиссу, как в таблице так и в памяти или переменной.
Почему Оракл говорит не полагаться на последние две цифры для вычислений мне неизвестно. Возможно, во время некоторых вычислений Оракл не соблюдает 40-значную точность т.к. использует 128-битную мантиссу внутри для скорости. Полная проверка арифметики Оракла это немаленькая задача, поэтому оставляю такое предположение неподтвержденным.

Итог: вопреки документации Оракла, цифры 39-40 не бесполезный довесок, а являются полноценными цифрами в целях хранения данных. 40-значная мантисса не помещается в 128-битное число, поэтому такое преобразование приведет к потери точности хранимых данных.

На практике: можно забить и терять эти две цифры.
Например: диаметр нашей галактики оценивается в 1е21 метров. Если кто-то считает "точную" длину окружности и потерял цифры 39-40 числа Пи, то они ошибутся на <1.5е-18 метров, что в двести раз меньше размера протона.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015255
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

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

stax


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

в этом и состоит существо проблемы , приводящей к тому, что не позаботившись об об этом вопросе самостоятельно,
вы становитесь рабом однажды написанного конкретного выражения.
У вас нет возможности "оптимизировать" его методом замены на другое.

Современный стандарт поощряет вычисление с большей точностью, чем позволяет структура хранения,
с требованием явного заявления способа округления промежуточного результата при записи в результирующее место хранения.
В оные времена, столь ясного понимания, выраженного в виде требований стандарта к реализации не было.
От чего и появилась "лучшая из возможных" реализация oracle number.

ссылку на этот топик я уже давал, вы, судя по всему, не читаете:
https://www.sql.ru/forum/1315510-a/peremena-mesto-mnozhitelya-v-vyrazhenii-imeet-znachenie

В отсутствии встроенного стандартного решения, вопрос превращается в головную боль не так уж и редко.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015342
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Далеко мы отошли от темы. Вся чехарда с number началась с совета про 'избегайте типов с плавающей точкой для индексов".

Сама тема - про то, как в ключи кто-то помещает полезную им информацию, а кто-то - 1-2-3, а кто-то - GUID.
Мой вывод из этого разговора, что единственного верного метода нет, у каждого есть преимущества и недостатки.

Лично я собираюсь продолжать 1-2-3 в своем проекте, потому что весь проект так сделан, значит стиль такой.

То, что вы интересуетесь численными методами, это хорошо. Я довольно хорошо с ними знаком, ввиду учебной специальности. Оракл не идеальная среда для научных вычислений, но у number внушительный размер мантиссы, и если не торопиться, позволяет посчитать многие вещи топорными методами "в лоб" без использования особых приемов.

Если вас занимают задачки по численным методам, можно новую тему открыть, в программировании.

Например, вы знаете как нарисовать окружность (посчитать координаты точек окружности на растровом экране) не используя арифметические операции сложнее чем +/-?
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015349
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Спасибо, нет, ничего открывать не надо.
Если и когда понадобится, я сам открою топик и про Безенхема и про Горнера и про то, какая связь между ними.
Сам по себе, любой алгоритм бесценен.
Его реальная ценность проявляется там и тогда, когда он начинает применяться в области, к которой ранее его не додумывались применять.
В своём огороде я потребности рисовать круги пока не наблюдаю.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015352
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
...Брезенхема...
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015364
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шикин и Боресков - Компьютерная графика.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015456
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
как нарисовать окружность (посчитать координаты точек окружности на растровом экране) не используя арифметические операции сложнее чем +/-?

На переполнениях счетчиков легко.
Но с погрушностью.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015459
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
как нарисовать окружность не используя арифметические операции сложнее чем +/-?

Нарисуйте окружность результатом sql-запроса, почему бы и нет
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015473
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше сыграть в шахматы на sql-запросе. Но что-то мы далеко ушли от темы.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015637
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
как нарисовать окружность не используя арифметические операции сложнее чем +/-?

Нарисуйте окружность результатом sql-запроса, почему бы и нет


Select 'O' from dual

Давайте что-то посложнее.
...
Рейтинг: 0 / 0
Смысловая нагрузка идентификатора строчки
    #40015692
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Select 'O' from dual

Давайте что-то посложнее.

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


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