Просто день открытий какой-то!

Oct 03, 2017 23:20

1) + на float не ассоциативный.

2) Если приложение которое насилует БД ускорить по CPU в 2 раза, то БД будет насиловаться в 2 раза интенсивнее!

Leave a comment

Comments 13

kodt_rsdn October 3 2017, 22:08:47 UTC
Ассоциативный, но в пределах погрешности. А если погрешность опережает значащую часть, то, конечно, извините! А если настаивать на том, что значащие разряды там все до последнего бита (например, для побитового сравнения) - то два раза извините.

Собственно, коммутативность и ассоциативность сложения используется в борьбе против ошибок, особенно - ошибок нормализации и денормализации.
Потому что мы-то знаем, что от перестановки _искомая_ сумма не меняется.

Reply

kunaifusu October 4 2017, 05:10:29 UTC
Смотря что называть "погрешностью". E.g.
abs (a0 + a1 + ... + an+x) - (x + a0 + a1 + ... + an) для x=2^24 и 0 < ai < 1 может быть 2^24-1, что явно больше погрешности представления любого слагаемого. Для практических применений он совершенно не ассоциативный.

Reply

kodt_rsdn October 4 2017, 08:40:34 UTC
Для практических применений (физматмоделирование, бухгалтерия) всегда считают погрешность вычислений.

Если у нас одно из слагаемых имеет порядок 1e24, это значит, что ошибка денормализации может достигать 1e0 для каждого сложения, итого может набежать n+2.

Тогда, как честные люди, мы напишем abs((a0+...+an+x)-(x+a0+...+an)) <= eps - что является типичной формулой приближённого сравнения вещественных чисел. Наши суммы приближённо равны, ЧТД (ИЧСХ).
Ну да, eps тут здоровенный. Однако, abs(eps/x) <= FLT_EPSILON*(n+2), что не так уж и плохо, э?

Reply

kunaifusu October 4 2017, 14:29:42 UTC
С такими аргументами любой оператор ассоциативный. abs(x/(y/z)) - (x/y)/z) < eps, где eps - здоровенный.

Reply


kodt_rsdn October 3 2017, 22:11:57 UTC
У базы данных есть отличный предохранитель: пропускная способность канала данных. Если приложение ускорить сверх меры, оно будет не насиловать, а изнывать в ожидании.

Reply

kkirsanov October 4 2017, 05:42:00 UTC
У нас такие запросы из седой старины обнаружились, что и канал нагружается, и БД страдает, да еще и 6+ GB RAM ест.

Reply

kodt_rsdn October 5 2017, 10:38:03 UTC
"Умеют же, когда захотят!"

Reply

kkirsanov November 7 2017, 09:20:27 UTC
--Если приложение ускорить сверх меры, оно будет не насиловать, а изнывать в ожидании.

Уже в другом компоненте:
1) На каждый запрос(SQL) создается новый коннект. Т.е. на 1 HTTP мы получаем 5+ коннектов
2) На каждый HTTP запрос в базу идет SQL на запрос здоровенных сертификатов. Если это кеширвоать то нагрузка на канал с базой падет в 18 раз.

Reply


Leave a comment

Up