2014-01-29 3 views
3

Я действительно смущен относительно скорости вычислений Matlab или Octave.Как можно Matlab или Octave быть такими быстрыми?

Как можно дать результат вычисления, например 5^5^5^5 (= 2.351*10^87, если вы хотите узнать)?

Я нашел некоторые результаты о the speed for matrix computations (this article), но ничего не сказал о других вопросах. И this не является объяснением (моя (наивная) реализация в Python работает около 5 минут прямо сейчас).

+0

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

+1

Вы хотите вычислить '5^(5^(5^5))' или '((5^5)^5)^5 = 2.351 * 10^87'? – tom

+0

Какой алгоритм вы используете для умножения? Школьный метод, Карацуба, используя БПФ? – rendon

ответ

3

5^5^5^5 не требует много операций в конце концов. Например, на каждом шаге мощности, скажем a^b, вы можете вычислить exp(log(a)*b), что дает тот же результат.

Я не говорю, что это обязательно, как это делает Matlab, и могут возникать проблемы с числовой точностью. Но это иллюстрирует, что многопользовательская операция не так сложна, как предполагало ее прямое вычисление.

Что касается точности вычислений:

>> format long 
>> 5^5^5^5 
ans = 
    2.350988701644576e+087 
>> exp(log(exp(log(exp(log(5)*5))*5))*5) 
ans = 
    2.350988701644561e+087 

Относительная погрешность

>> 1 - (5^5^5^5/exp(log(exp(log(exp(log(5)*5))*5))*5)) 
ans = 
    -6.661338147750939e-015 

, которая не очень далеко от eps.

+1

Возможно, вы имеете в виду «не требует». – MrAzzaman

+0

@MrAzzaman Woops! Спасибо!! –

 Смежные вопросы

  • Нет связанных вопросов^_^