powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость арифметики с number
25 сообщений из 38, страница 1 из 2
Скорость арифметики с number
    #40007464
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот новый для меня тип number (переменная длина, десятичный формат, отсутствие аппаратной поддержки) поначалу вызвал настороженность.

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

Сравнение нормализованных number можно сделать довольно эффективно, насчёт других операций не уверен.

Предполагаю, что даже если арифметика с number происходит на порядок медленнее, это вряд ли влияет на общую картину, т.к. оракле - это не платформа для численных методов, а самые ходовые функции встроены и наверное оптимизированы.

Чтобы отмахнуться от этой мысли медленной арифметики раз и навсегда, собираюсь сделать несколько замеров численных методов в компилированом pl/sql для number против других поддерживаемых форматов. Если только на порядок медленнее, можно жить.

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

Чистые арифметические операции с Number медленнее примерно на порядок по сравнению с машинными типами данных, если операции смешанные, то в большинстве реальных кейсов разница не имеет особого значения.

Ask Tom: PLS_INTEGER versus NUMBER versus "dynamic types"
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007483
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode,


Спасибо. Это как раз те заключения, на которые я надеялся.
Медленнее чем оптимально, но на картину в целом не влияет.

Поскольку таблицы не умеют хранить pls_integer (в 11.2,) небрежное его использование может привести и к замедлению, из-за необходимых преобразований.

Эксперимент Тома для number/pls_integer довольно исчерпывающий, я сделаю сравнение для number/IEEE.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007518
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

вопрос про "скорость арифметики с number" по степени нелепости примерно эквивалентен вопросу "что быстрее sql или c++".

В обоих случаях это ... кхм... скажем округло - вопрос такого человека, который, скорее всего,
не сможет разумно обойтись ни с каким ответом, по причине не способности понять смысла полученных ответов.

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

Вот поставите вы "эксперименты" и они покажут, что binary_double, допустим,
на пару порядков быстрее number на каком-то наборе операций.
Что вы с этой скоростью делать собираетесь, если ваших заказчиков
перестанет устраивать результат, возвращаемый агрегатным Sum?
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007523
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,


Попробую ответить.

авторЧтобы отмахнуться от этой мысли медленной арифметики раз и навсегда, собираюсь сделать несколько замеров численных методов в компилированом pl/sql для number против других поддерживаемых форматов. Если только на порядок медленнее, можно жить.

Вас интересовало, что я собираюсь делать, если некоторые операции значительно (в сотни-тысячи раз) быстрее для IEEE чисел.

В этом случае я собираюсь изучить вопрос более подробно, посмотреть в каких ситуациях может произойти нежелательное неявное преобразование, и как этого могут избежать те, кому важна скорость арифметики в pl/sql.

>если ваших заказчиков перестанет устраивать результат, возвращаемый агрегатным Sum?

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


В общем-то, чтд.

Количество вреда, которое вы на текущий момент способны принести своим работодателям,
если они у вас на самом деле есть, непредсказуемо велико.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007526
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
НеофитSQL
...
Хороший, кстати use case - сравнить скорости агрегатных функций на колонках разных типов. Спасибо.


В общем-то, чтд.

Количество вреда, которое вы на текущий момент способны принести своим работодателям,
если они у вас на самом деле есть, непредсказуемо велико.


Это справедливое замечание для любого человека с админ доступом к серверу.

Однако, это не объясняет почему мой интерес к этому вопросу вас раздражает. Он к моей работе не относится, я расширяю свой кругозор где мне интересно.

Ещё бы хотелось узнать, когда и кем был изобретён формат number. Какие цели преследовались (одну я знаю, избежать ошибок округления двоичной арифметики) , и какие альтернативы рассматривались.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007529
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Это справедливое замечание для любого человека с админ доступом к серверу.

между результатом обращения с гранатой обезьяны и обученного бойца есть существенная разница

Однако, это не объясняет почему мой интерес к этому вопросу вас раздражает. Он к моей работе не относится, я расширяю свой кругозор где мне интересно.

Не раздражает.
Очень хорошо, что не относится к работе.
Кругозор вы расширяете методом случайного тыка.
И каждый раз обнаруживается, что вам не на что опереться,
в тех вопросах, которые внезапно показались вам "интересными".

Ещё бы хотелось узнать, когда и кем был изобретён формат number. Какие цели преследовались (одну я знаю, избежать ошибок округления двоичной арифметики) , и какие альтернативы рассматривались.

Конкретной истории вопроса применительно к реализации в Oracle я не знаю.

По сути это разновидность того, что сейчас называют BCD-кодированием,
различные варианты которого реализовывались как в железе, годов до 80х прошлого века, так и в языках программирования сорта COBOL или PL/I

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


Ошибка округления двоичной арифметики, это когда например округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1. Простой пример, легко запомнить.

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

вот недавний совсем топик, посмотрите, может быть будет "интересно".

https://www.sql.ru/forum/1315510-1/peremena-mesto-mnozhitelya-v-vyrazhenii-imeet-znachenie
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007533
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1.
Это довольно полезно для финансовых задач.

Есть разные правила округления.
Если уж упомянуты финансовые задачи, то тут применяют округление до ближайшего чётного . Для приведённого примера оно даёт как раз 0, а не 1.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007535
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася
НеофитSQL
округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1.
Это довольно полезно для финансовых задач.

Есть разные правила округления.
Если уж упомянуты финансовые задачи, то тут применяют округление до ближайшего чётного . Для приведённого примера оно даёт как раз 0, а не 1.


Round(0.1*15)=?

Я думаю мы оба понимаем о чем речь. Или теперь надо до нечётного округлять? :)
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007536
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Или теперь надо до нечётного округлять?

Правила округления.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007537
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
НеофитSQL,

вот недавний совсем топик, посмотрите, может быть будет "интересно".

https://www.sql.ru/forum/1315510-1/peremena-mesto-mnozhitelya-v-vyrazhenii-imeet-znachenie


Это слишком просто, на уровне 1/3*3.
Человек поигравшийся с калькулятором понимает откуда ошибка
Для 1/10*10 это неочевидно для непрограммистов.
Одно из преимуществ BCD - они себя ведут как те десятичные числа, которые учат в школе.

Второе преимущество - их легче и быстрее распечатать в десятичном формате, самом популярном. Слабенький, но козырь.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007538
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася
НеофитSQL
Или теперь надо до нечётного округлять?

Правила округления.


Хорошее упорство :)

Round(1.5) -Round(15*0.1)=?
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007539
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Хорошее упорство

Кто б говорил.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007540
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Вы не поняли ни того, что вам сказал Правильный_Вася, ни того, о чём шла речь в топике по ссылке.
...
Остается надеяться только на то, что "для работы",
результаты полученных измерений Number вам не скоро пригодятся...

PS
Oracle, кстати, не использует округление half to even, это специфически именно имени компании Microsoft представление о том, каким должно быть "банковское округление".
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007542
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Oracle, кстати, не использует округление half to even, это Microsoft представление о том, каким должно быть "банковское округление".

Не совсем так. Понятие гораздо старше Майкрософта.
И в Оракле есть специальное округление
Код: plsql
1.
SELECT ROUND_TIES_TO_EVEN (0.5), ROUND_TIES_TO_EVEN (1.5) FROM dual;
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007545
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася,
еще не у всех есть, но появилось в 18й версии.

Что до термина, происхождение его темно и неведомо

Стандарт IEEE 754-1985 термина banker's rounding предпочитает не использовать, а толкует
о rounding to nearest, излагая по сути half to even rounding и предполагает, что это рекомендованный метод по умолчанию.
У Microsoft, в VB/VBA, например, (по крайней мере, после 85 года) оно такое и есть,
но в документации названо "банковским".

Так что за распространение именно этого термина в технической литературе вся заслуга у MS.
Вообще-то его еще называют голландским, Гауссовым, немецким, статистическим и сходящимся.
https://en.wikipedia.org/wiki/Rounding#Round_half_to_even
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007548
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выходной закончился, давайте не распыляться от темы.
А то скоро начнутся религиозные бои за округления..

Если у кого-то остались сомнения, что у BCD чисел есть преимущество более привычной арифметики (и округления) чем у двоичных, пусть так и будет.

Лошадь можно привести к воде, но нельзя заставить ее пить.(с)

Завтра напишу результаты первых замеров по сравнительной скорости number и IEEE чисел для разных операций. Думаю, что IEEE будут быстрее. Надеюсь, что не в сотни раз.

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

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

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

Невероятно, чтобы ты провел тесты, измеряющие скорость собственно математики, корректно.

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

И во всем этом нет смысла, если ты не знаешь, что тебе надо от математики.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007582
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Завтра напишу результаты первых замеров по сравнительной скорости number и IEEE чисел для разных операций. Думаю, что IEEE будут быстрее. Надеюсь, что не в сотни раз.

тестируйте с точностью до 38-знаков

зы
насчет формата
гляньте IBM "зонный" формат
оракле могое "упростив скопировал для совместимости" с DB 2
ходили слухи что даж коды ошибок хотели совместить

.....
stax
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007698
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby

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


Интересное мнение. Десятки тысяч? Я бы ожидал, что при наличии недорого каста в/из BCD, и присутствии аппаратной поддержки для 64-бмтнй мантиссы, все "сложные" операции просто сделают через каст в IEEE, FPU, и каст обратно.

Другими словами, максимальная разница не должна превышать стоимости двух BCD/IEEE преобразований, и по-моему даже для таких преобразований есть аппаратная поддержка у интела/АМД.
...
Рейтинг: 0 / 0
Скорость арифметики с number
    #40007709
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как микропроцессоры BCD не умеют, это EC-ки умели
Да и к BCD NUMBER имеет мало отношения, просто похож

И выбрана такая система хранения была, КМК, для удобства сравнения (сравнивается как строка) + точность + независимость от Endian
Ну и тоже слышал, что калька/подобие с IBM DB2
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость арифметики с number
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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