|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Этот новый для меня тип number (переменная длина, десятичный формат, отсутствие аппаратной поддержки) поначалу вызвал настороженность. Избежать его непросто, т.к. это тип численных данных по умолчанию, и неявные преобразования имеют место быть. Сравнение нормализованных number можно сделать довольно эффективно, насчёт других операций не уверен. Предполагаю, что даже если арифметика с number происходит на порядок медленнее, это вряд ли влияет на общую картину, т.к. оракле - это не платформа для численных методов, а самые ходовые функции встроены и наверное оптимизированы. Чтобы отмахнуться от этой мысли медленной арифметики раз и навсегда, собираюсь сделать несколько замеров численных методов в компилированом pl/sql для number против других поддерживаемых форматов. Если только на порядок медленнее, можно жить. Надеюсь что кто-то это уже делал до меня, поиск по форуму пока ничего не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 18:51 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL, Чистые арифметические операции с Number медленнее примерно на порядок по сравнению с машинными типами данных, если операции смешанные, то в большинстве реальных кейсов разница не имеет особого значения. Ask Tom: PLS_INTEGER versus NUMBER versus "dynamic types" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 20:23 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
graycode, Спасибо. Это как раз те заключения, на которые я надеялся. Медленнее чем оптимально, но на картину в целом не влияет. Поскольку таблицы не умеют хранить pls_integer (в 11.2,) небрежное его использование может привести и к замедлению, из-за необходимых преобразований. Эксперимент Тома для number/pls_integer довольно исчерпывающий, я сделаю сравнение для number/IEEE. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 20:36 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL, вопрос про "скорость арифметики с number" по степени нелепости примерно эквивалентен вопросу "что быстрее sql или c++". В обоих случаях это ... кхм... скажем округло - вопрос такого человека, который, скорее всего, не сможет разумно обойтись ни с каким ответом, по причине не способности понять смысла полученных ответов. Применительно к числам, правильно было бы сначала сформулировать набор необходимых вам требований к вычислительному базису, реализованному в системе для таких или иных чисел. Вот поставите вы "эксперименты" и они покажут, что binary_double, допустим, на пару порядков быстрее number на каком-то наборе операций. Что вы с этой скоростью делать собираетесь, если ваших заказчиков перестанет устраивать результат, возвращаемый агрегатным Sum? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 00:37 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby, Попробую ответить. авторЧтобы отмахнуться от этой мысли медленной арифметики раз и навсегда, собираюсь сделать несколько замеров численных методов в компилированом pl/sql для number против других поддерживаемых форматов. Если только на порядок медленнее, можно жить. Вас интересовало, что я собираюсь делать, если некоторые операции значительно (в сотни-тысячи раз) быстрее для IEEE чисел. В этом случае я собираюсь изучить вопрос более подробно, посмотреть в каких ситуациях может произойти нежелательное неявное преобразование, и как этого могут избежать те, кому важна скорость арифметики в pl/sql. >если ваших заказчиков перестанет устраивать результат, возвращаемый агрегатным Sum? Хороший, кстати use case - сравнить скорости агрегатных функций на колонках разных типов. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 01:58 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL ... Хороший, кстати use case - сравнить скорости агрегатных функций на колонках разных типов. Спасибо. В общем-то, чтд. Количество вреда, которое вы на текущий момент способны принести своим работодателям, если они у вас на самом деле есть, непредсказуемо велико. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 02:10 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby НеофитSQL ... Хороший, кстати use case - сравнить скорости агрегатных функций на колонках разных типов. Спасибо. В общем-то, чтд. Количество вреда, которое вы на текущий момент способны принести своим работодателям, если они у вас на самом деле есть, непредсказуемо велико. Это справедливое замечание для любого человека с админ доступом к серверу. Однако, это не объясняет почему мой интерес к этому вопросу вас раздражает. Он к моей работе не относится, я расширяю свой кругозор где мне интересно. Ещё бы хотелось узнать, когда и кем был изобретён формат number. Какие цели преследовались (одну я знаю, избежать ошибок округления двоичной арифметики) , и какие альтернативы рассматривались. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 02:40 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL Это справедливое замечание для любого человека с админ доступом к серверу. между результатом обращения с гранатой обезьяны и обученного бойца есть существенная разница Однако, это не объясняет почему мой интерес к этому вопросу вас раздражает. Он к моей работе не относится, я расширяю свой кругозор где мне интересно. Не раздражает. Очень хорошо, что не относится к работе. Кругозор вы расширяете методом случайного тыка. И каждый раз обнаруживается, что вам не на что опереться, в тех вопросах, которые внезапно показались вам "интересными". Ещё бы хотелось узнать, когда и кем был изобретён формат number. Какие цели преследовались (одну я знаю, избежать ошибок округления двоичной арифметики) , и какие альтернативы рассматривались. Конкретной истории вопроса применительно к реализации в Oracle я не знаю. По сути это разновидность того, что сейчас называют BCD-кодированием, различные варианты которого реализовывались как в железе, годов до 80х прошлого века, так и в языках программирования сорта COBOL или PL/I В данном случае, используется представление переменной длины. Которое, вообще говоря, не избегает "ошибок округления двоичной арифметики", что бы вы под этим ни подразумевали ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 03:39 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby, Ошибка округления двоичной арифметики, это когда например округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1. Простой пример, легко запомнить. Это довольно полезно для финансовых задач. Недавно как раз приходил на форум человек с похожим вопросом, тоже не знал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 03:59 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL, вот недавний совсем топик, посмотрите, может быть будет "интересно". https://www.sql.ru/forum/1315510-1/peremena-mesto-mnozhitelya-v-vyrazhenii-imeet-znachenie ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 04:03 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1. Это довольно полезно для финансовых задач. Есть разные правила округления. Если уж упомянуты финансовые задачи, то тут применяют округление до ближайшего чётного . Для приведённого примера оно даёт как раз 0, а не 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 04:10 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Правильный Вася НеофитSQL округление 0.1*5 до целого числа даёт 0 в двоичной системе, а по правилам округления должно давать 1. Это довольно полезно для финансовых задач. Есть разные правила округления. Если уж упомянуты финансовые задачи, то тут применяют округление до ближайшего чётного . Для приведённого примера оно даёт как раз 0, а не 1. Round(0.1*15)=? Я думаю мы оба понимаем о чем речь. Или теперь надо до нечётного округлять? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 05:01 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby НеофитSQL, вот недавний совсем топик, посмотрите, может быть будет "интересно". https://www.sql.ru/forum/1315510-1/peremena-mesto-mnozhitelya-v-vyrazhenii-imeet-znachenie Это слишком просто, на уровне 1/3*3. Человек поигравшийся с калькулятором понимает откуда ошибка Для 1/10*10 это неочевидно для непрограммистов. Одно из преимуществ BCD - они себя ведут как те десятичные числа, которые учат в школе. Второе преимущество - их легче и быстрее распечатать в десятичном формате, самом популярном. Слабенький, но козырь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 05:12 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Правильный Вася Хорошее упорство :) Round(1.5) -Round(15*0.1)=? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 05:15 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL, Вы не поняли ни того, что вам сказал Правильный_Вася, ни того, о чём шла речь в топике по ссылке. ... Остается надеяться только на то, что "для работы", результаты полученных измерений Number вам не скоро пригодятся... PS Oracle, кстати, не использует округление half to even, это специфически именно имени компании Microsoft представление о том, каким должно быть "банковское округление". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 05:24 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby Oracle, кстати, не использует округление half to even, это Microsoft представление о том, каким должно быть "банковское округление". Не совсем так. Понятие гораздо старше Майкрософта. И в Оракле есть специальное округление Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 05:52 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Правильный Вася, еще не у всех есть, но появилось в 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 06:37 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Выходной закончился, давайте не распыляться от темы. А то скоро начнутся религиозные бои за округления.. Если у кого-то остались сомнения, что у BCD чисел есть преимущество более привычной арифметики (и округления) чем у двоичных, пусть так и будет. Лошадь можно привести к воде, но нельзя заставить ее пить.(с) Завтра напишу результаты первых замеров по сравнительной скорости number и IEEE чисел для разных операций. Думаю, что IEEE будут быстрее. Надеюсь, что не в сотни раз. Принимаю ставки, кто ближе угадает? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 06:52 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL напишу результаты первых замеров по сравнительной скорости Не забудь учесть платформу (ОС), на которой ты будешь это делать. Потому как внутренняя реализация вычислений может использовать платформенно-зависимый код, который, в свою очередь, может использовать разные возможности процессора, который тоже может быть разным. Не говорю уже о "посторонней" загрузке системы в разные моменты тестирования. Иными словами, твои замеры не имеют никакого значения ни для кого, кроме тебя, и ни в какой момент времени, кроме момента измерения. Или у тебя 100500 тестовых платформ в 100500 разных условиях? Ну, тогда тебе не в программеры и не в админы идти. Открывай контору, бери подряды на тестирование у корпораций. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 07:03 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL, Невероятно, чтобы ты провел тесты, измеряющие скорость собственно математики, корректно. Если проведешь корректно - на сложениях будут разы, на умножениях - десятки, на модулях-синусах-логарифмах - десятки тысяч и более, при корректном устройстве теста. И во всем этом нет смысла, если ты не знаешь, что тебе надо от математики. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 07:15 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
НеофитSQL Завтра напишу результаты первых замеров по сравнительной скорости number и IEEE чисел для разных операций. Думаю, что IEEE будут быстрее. Надеюсь, что не в сотни раз. тестируйте с точностью до 38-знаков зы насчет формата гляньте IBM "зонный" формат оракле могое "упростив скопировал для совместимости" с DB 2 ходили слухи что даж коды ошибок хотели совместить ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 09:26 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
booby Если проведешь корректно - на сложениях будут разы, на умножениях - десятки, на модулях-синусах-логарифмах - десятки тысяч и более, при корректном устройстве теста. . Интересное мнение. Десятки тысяч? Я бы ожидал, что при наличии недорого каста в/из BCD, и присутствии аппаратной поддержки для 64-бмтнй мантиссы, все "сложные" операции просто сделают через каст в IEEE, FPU, и каст обратно. Другими словами, максимальная разница не должна превышать стоимости двух BCD/IEEE преобразований, и по-моему даже для таких преобразований есть аппаратная поддержка у интела/АМД. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 13:24 |
|
Скорость арифметики с number
|
|||
---|---|---|---|
#18+
Вроде как микропроцессоры BCD не умеют, это EC-ки умели Да и к BCD NUMBER имеет мало отношения, просто похож И выбрана такая система хранения была, КМК, для удобства сравнения (сравнивается как строка) + точность + независимость от Endian Ну и тоже слышал, что калька/подобие с IBM DB2 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 13:35 |
|
|
start [/forum/topic.php?fid=52&msg=40007531&tid=1880725]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 560ms |
0 / 0 |