|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Привет. Из курса численных методов и архитектуры FPU, я помню что железо имеет встроенный расчет натурального логарифма. 1) Кто знает какой метод реализован под капотом? Сходу я замечу что "лобовые" методы такие как ряды Тейлора-Лорана я обдумывал. Но возможно они не подойдут из-за наличия высоких степеней в которые нужно возводить x (см. дальше почему) Нужна хитрость. Возможно методы основанные на последовательных приближениях. Вот про эту хитрость я и спрашиваю. 2) В топиках простых чисел я неоднократно сталкивался с расчетом натруального логарифма для числе разрядностью в 512 и более бит. И возникла необходимость считать с точностью выше чем double(64bit) т.к. в противном случае мы теряем младшие разряды. Тоесть если я к примеру беру натруальный логарим от рандомного числа с разрядностью 512 бит то я и ожидаю что следующая проверка будет близка к точности длинных целых чисел. Например: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 11:44 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
mayton, Хитрость тут, по-моему лежит на поверхности. Нужно привести к виду , где A-"удобное" число, из которого извлекается целый логарифм, B<1. Второе слагаемое считаем в лоб, сходится будет очень быстро. С натуральным вычислить A неудобно, проще перевести в двоичный, и тогда это ближайшая степень двойки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 11:56 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Можем-ли мы применить Метод Ньютона? В этом случае мы переворачиваем график относительно диагонали и ищем решение пересечения экспоненты с осью OX. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 12:10 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Соколинский Борисmayton, Хитрость тут, по-моему лежит на поверхности. Нужно привести к виду , где A-"удобное" число, из которого извлекается целый логарифм, B<1. Второе слагаемое считаем в лоб, сходится будет очень быстро. С натуральным вычислить A неудобно, проще перевести в двоичный, и тогда это ближайшая степень двойки. Какое удобное число А вы предложите? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 12:12 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
mayton1) Кто знает какой метод реализован под капотом? Есть же стандарт IEEE-754 для таких вопросов, там емнип должно быть описано какой метод в итоге реализован. В целом я бы сказал что там табличные функции (основная таблица плюс приближения). Есть софт-реализации (типа теста softfloat), которые сходятся со стандартом до бита. Но это все в рамках ieee-754 разрядностей. Все что больше - на усмотрение разработчиков железа, насколько я думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 12:37 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
maytonКакое удобное число А вы предложите? Я бы сначала перевел в двоичный, нашел ближайшую степень двойки, вычислил первое слагаемое, потом перевел обратно в натуральный и досчитал второе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 12:49 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Aklinmayton1) Кто знает какой метод реализован под капотом? Есть же стандарт IEEE-754 для таких вопросов, там емнип должно быть описано какой метод в итоге реализован. Пока не нашел. Стандарт описывает только формат представления числа. То что я спрашиваю - скорее всего архитектура со-процессора или численные методы мат-библиотек. Но если вы знаете линк - прошу скинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 13:32 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
mayton Кто знает какой метод реализован под капотом? https://math.stackexchange.com/questions/61209/what-algorithm-is-used-by-computers-to-calculate-logarithms ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 13:36 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Скачал один док The Computation of Transcendental Functions on the IA-64 Architecture. Почитаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 17:34 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Так ли нужны сами логарифмы? 2 контрольных вопроса: а) правильно понял, что нужно выражение b/ln(b) - a/ln(a) ? б) разумна ли оценка этого выражения в 275 ? при а= 2^500, b= a+ 2*10^5 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 20:37 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
блин , на ln(2) надо было не умножать, а делить Поправка в вопросе п.(б) : оценка 577 + o((1/ln(a))^2) для b= 2^500 + 2*10^5 для b= 2^200 + 10^6 оценка разности = 7213,4752.... Годится? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 21:03 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
mayton, ИМХО в железе нет супералгоритмов, подозреваю что там решено по принципу "лишь бы было", это не та задача куда надо кучу бабла вложить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 21:10 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
реакции 0, а я ваш последний диапазон нашёл. Оценка разности для b= 2^1024 + 200 000 равна 281,50147 Вообще, это нижние оценки и их можно улучшать. Но я ещё погрешность не ту сказал, она для производной, её надо умножать на те самые маленькие диапазончики 200 000 и 10^6. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 21:40 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Dima Tmayton, ИМХО в железе нет супералгоритмов, подозреваю что там решено по принципу "лишь бы было", это не та задача куда надо кучу бабла вложить Ты ошибаешься. Это очень дорогая задача. В свое время Intel бесплатно менял процессоры на новые тем клиентам которые пострадали от ошибки в FPU. Даже при том что эту ошибку долго не замечали в расчетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 08:35 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
exp98, Дорогой друг. Была пятница. Я хоть и активный мамбер но тоже могу завтыкать. Надеюсь мне простят эту слабость. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 08:42 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
exp98Так ли нужны сами логарифмы? 2 контрольных вопроса: а) правильно понял, что нужно выражение b/ln(b) - a/ln(a) ? Да. Логарифм это не главное. Главное - получить численную оценку. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 17:04 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Стоп. Пока я не кинулся очертя голову считать толстые логарифмы. Я не исчерпал возможности double. По экспоненциальной сетке он доходит лишь до 1.7*10^308. Мы ищем Хи-криптографическое (о котором я писал в другом тематическом топике) до 2^2048. Для сравнения прологарифмирую оба числа. Код: sql 1. 2. 3. 4. 5.
Хи-крипотграфическое - больше. Помимо стандартного double имеет под-виды. - long double (extended) 80bit - binary128 (Quadruple precision) 128 bit - binary256 (Octuple precision) 256 bit extended теоретически поддерживается GCC/Clang компилляторами поэтому играя настройками и типами данных я думаю что этот злосчастный логарифм я смогу посчитать приближенно без дополнительных делений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 21:12 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
80bit декларировалось даже в старом ВС (я не проверял). Не помню, есть ли 128bit в 11g оракла. Но дело не в этом. Пока ты в самом деле не кинулся их считать: В каких случаях это не нужно. Это не нужно если диапазон вподне сносный для обычного подсчёта. 50 млн вполне себе. Просто скажу, что усов-то уже сделал до меня оценку, а я зря трудился. Что там где-то расхождения в 1-50-10тыс - это ерунда. Важнее подсчитать точность оценочной формулы и контролировать именно этот +-. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 22:07 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Оценки разности ,данные в таблице Усовым вполне можно использовать. Поясню школьными рассуждениями. Скорее всего мы оба считали примерно одно. Имеем ф-цию F=X/LnX в точках a,b, где dx= b-a (50млн, 1млн, 200тыс ...) Т.е. доля dx/a пренебрежительно мала. Производная F'= (Ln X - 1)/Ln^2 X График F ассимптотически приближается к Х снизу, зачит F ещё и выпукла вверх. Значит линейное приближение dy= F(b)-F(a)= F'(a) dx + О(dx ^2) будет верхней оценкой искомой разности (у меня была описка, что нижней оц.) Кто забыл F'(a) = тангенсу наклона прямой. Вот F'(a) dx я и подсчитал (правда на калькуляторе, поэтому и саму F'(a) без второго слагаемого, но даже это даёт ничтожное различие). Согласно Тейлору коэфф-т при степени будет F''(a). F''(x)= 1/X/Ln^2 X *(2/Ln X - 1) Так что остаточный член в разложении = F''(a)/2 * dx ^2 dx ^2 / X пренебрежимо мал для ваших X= 2^200 и т.д. по сравнению с первой степенью разложения. Так что, пока это выполняется, тут всё хорошо. Надо смотреть точностные границы самой формулы для интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 22:36 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
На long double. Эффективно мне удасться посчитать только на числах менее 64бит по мантиссе. Если подставлять более длинные числа то мантисса режет младшие разряды и сложение с 50 000 000 может быть грубее и грубее соотв. с ростом выхода за пределы мантиссы. Wiki пишет разную информацию по разрядности. Она может плавать. Visual C++ может вообще long double проигнорировать и считать его синонимом double. Мой GCC gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) показывает 16 байт == 128 бит. Это неожиданно. Я предполагал что будет 80. Это странно надо поразбираться. На других компиллерах возможно будет другой эффект. В таком случае __float128 должен быть бинарно совместим с long double однако мне пока его не удается распечатать на экране с корректным форматированием. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 00:28 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Код: 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. 37. 38. 39. 40. 41. 42. 43.
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 00:30 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
Вот этот дефект. После возведения 2 в 128 степень результат уже не отличается от сложения с 50 лимонами. Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 00:32 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
size(16) - скорее всего фейк. Там по идее должно быть 80 бит или 10 байт. А 16 это возможно результат такого себе padding. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 00:38 |
|
Толстые натуральные логарифмы
|
|||
---|---|---|---|
#18+
для __float128 функция логарифма скорее всего не определена в стандартных либах. Надо искать нестандартные. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 00:41 |
|
|
start [/forum/topic.php?fid=16&fpage=9&tid=1339903]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
80ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 204ms |
0 / 0 |