Pull to refresh

Comments 33

Все-таки авторское решение — далеко не на одну минуту. Думаю что даже у Фейнмана провести требуемые вычисления при известном алгоритме заняло бы больше.
Фейнман любил применять метод последовательных приближений к результату, он описывает это в книге. Если например его просили сделать в уме сложные вычисления достаточно быстро, он начинал выдавать ответ сразу (понятно что если разделить 45 на 16, то результат будет меньше трех => можно сразу сказать что целая часть ответа = 2).
И скорее всего, его остановили бы уже на 3-4 знаке. :)
Порядок величины можно оценить и проще:

tg x ≈ x (с точностью более 1% для углов меньше 15°)

tg 10° ≈ π (10° / 180°) = 3,14 / 18 ≈ 0,17 — быстро делить трёхзначные числа несложно

0,17100 = 17100 × 10−200 = 10(100 lg 17) − 200

lg 17 ≈ 1,23 — до 20 можно и заучить таблицу

Итого (tg 10°)100 ≈ 10−77
Тогда можно было просто начать диктовать: «Ноль, запятая, ноль, ноль, ноль, ....»
А, и если ещё что-то останется от минуты:

  1. улучшаем оценку тангенса до 0,175
  2. вытягиваем из памяти lg 18 ≈ 1,255
  3. прикидываем lg 17,5 ≈ (lg 17 + lg 18) / 2 ≈ 1,2 + (0,03 + 0,055) / 2 ≈ 1,243
  4. получаем (tg 10°)100 ≈ 10−75,7 = 100,3 × 10−76 ≈ 2 × 10−76

Если ещё учесть, что 0,175 — на самом деле 0,17(4), то можно чуть завысить результат. Скажем, до 5 × 10−76 или даже 4 × 10−76, чтобы не сильно.

Так что как минимум есть хорошая вероятность попасть в заветные 10% отклонения (если помнить таблицу логарифмов и уметь в быструю арифметику).
Возведем e в полученную степень и приходим к результату 10⁻⁷⁶.

Так ваш результат отличается на 80%
Что может быть проще? Это порядка 24643856.
А я вот это не понял:
Ln(3)=Ln(e*(1+0,9/e))…
Даже не близко.
Да, разумеется здесь опечатка Ln(3)=Ln(e*(1+0,3/e))≈1+Ln(1+1/9)=1,1
забавно, когда-то давно слышал про эту же задачу, но в той версии говорили про «тангенс от 10^100». Причем если речь шла о градусах, то задача легко решится за минуту, а вот если радиан, то как раз «надо знать число пи с точностью более 100 знаков»
Вы правы. В оригинале «The tangent of 10 to the 100th». Переводчик либо сам не очень знал матчасть, либо переводил для людей, которые радианы со школы уже не помнят.
Прекрасное замечание! Теперь ясно о чем шла речь! Дело в том, что мне совершенно не понятна была эта фраза «нужно ДЕЛИТЬ на число пи до ста десятичных разрядов». Скорее всего задача формулировалась именно так, «найти tg(10^100).
Очень хороший пример того, почему подобные книжки должны наряду с обычными переводчиками вычитывать специалисты по предметной области. То же самое творится с iWoz: я пробовал читать перевод и буквально на первых же страницах обнаружил несколько подобных ляпов, где переводчик явно стремясь сделать фразы «более понятными» просто кардинально менял смысл того, о чём говорилось в оригинале.

P.S. Это в дополнение к тому, что сейчас и просто за качеством русского языка зачастую в книжках особо не смотрят.
Я пасусь на СамИздате, и ты не поверишь сколько людей считают, что знают русский язык, лишь на том основании, что «изучали» его в школе.
Как-то, читая корректуру своей статьи, одна математик натолкнулась на ситуацию, когда редактор в целях повышения читаемости и исправления неправильного, как ему казалось, русского языка поменял местами условие и заключение теоремы.
Когда мы издавали в университете методичку по алгебре, студентка филфака, которая набирала текст, исправила все корни из отрицательных чисел на корни из положительных со словами: 'Но так же нельзя!'
Цитата из дипломной работы, 69-я страница:
— Так как до этого места всё равно никто не дочитает, примем число «пи» равным пяти. Иначе расчёты не сходятся, а искать ошибку мне лень.
Как раз при прочтении оставил нерешенным этот вопрос. Теперь всё на своих местах.
Любопытно, что wolframalpha и гугль выдают разные результаты. 0.40123… и -0.68951…
Ошибается очевидно гугль, т.к. для tan(10^100) и tan(1e+100) выдаётся разный результат.
Ну такую разницу результатов у гугля несложно объяснить: 1е+100 — это готовое число с плавающей точкой, а 10^100 — это либо целочисленное возведение в степень, которое потом с ограниченной точностью конвертируется в double, либо нецелочисленное возведение в степень, но в любом случае оно происходит с округлениями, а в этой задаче даже ошибка в сотом знаке после запятой приведет к совсем другому результату.

А вообще я почти полностью уверен, что оба результата неправильные, потому что для правильного результата нужно использовать число пи с более 100 значащими цифрами, а такая точность ни в какой double и близко не влезает.
Однако sin(pi+1e-101) выдаёт правильный результат (хотя конечно математика может и не считать в лоб). Да и калькулятор в семёрке выдаёт те же 0,40123… (а вот в последней убунте -0.60261...).
Вольфрмальфа явно не double использует, там можно в веб-интерфейсе понажимать кнопку и тысяч пять знаков после запятой посмотреть
Ну посмотреть-то можно, но я сильно сомневаюсь, что для вычислений они какую-то сверхвысокую точность используют.
Ого, какой вольфрам оказывается крутой. Не знал.
Зачем так извращаться, когда почти очевидно, что достаточно взять один член разложения тангенса в нуле? tg(x) = x(1 + O(x^2)) Я, признаться, не смог за минуту в уме найти хорошую оценку остаточному члену, но число (pi/18)^200 настолько мало по сравнению с 1/10, что в условиях пари можно рискнуть и поверить, что константа в O-большом с большим запасом подавится квадратом аргумента.

Один из предыдущих комментаторов помнит больше полезных констант, поэтому может быть уверенным в оценке. Остается вычислить (pi/18)^100, но это уже несложно.
Кстати, а не мог бы кто-нибудь из присутствующих порекомендовать книжку по вычислительной математике? А то я думал, что умею считать, а оказалось, что считать умеет мой калькулятор. :(
Весьма неплохая книжка, чтобы начать:
А.А. Самарский, А.В. Гулин, Численные методы

А вообще смотря что вы хотите. Большинство задач решаются по принципу «строим ряд и считаем его в точке». Хотя конечно не мешало бы знать, что такое «в окрестности точки» и «радиус сходимости».
Sign up to leave a comment.

Articles