Нужно больше точности от fprintf - Matlab - PullRequest
0 голосов
/ 29 сентября 2011

M-файл

fprintf('\n\nn!\n')
for i=[1:length(timearray)]
    fprintf('%s \t %d \n', stringarray{i},factorial(timearray(i)))
end

Вывод

n!
microsecond      1 
minute       Inf 
hour         Inf 
day          Inf 
month        Inf 
year         Inf 
century      Inf 

Я пытаюсь вычислить количество шагов алгоритма, который выполняется при n!выполняется с указанными выше интервалами (при условии, что 1 шаг = 1 мкс).Однако я не могу заставить fprintf отображать значимые результаты.

Переключение на fprintf('%s \t %bu \n', stringarray{i},factorial(timearray(i))) дало мне некоторые цифры, но я подозреваю, что они неверны.

n!
microsecond      04607182418800017408 
minute       09218868437227405312 
hour         09218868437227405312 
day          09218868437227405312 
month        09218868437227405312 
year         09218868437227405312 
century      09218868437227405312 

Отказ от ответственности : я написал эту программу для решения проблемы с домашним заданием, однако домашнее задание никогда не указывалось для написания программы.

Спасибо за любую помощь!* Mike

Ответы [ 2 ]

5 голосов
/ 29 сентября 2011

Скорее всего, проблема не в печати как таковой, а в том, что факторные вычисления сами по себе переполнены.Попробуйте просто оценить значение, а не печатать его в цикле;вы обнаружите, что функция факториала переполняется после 170!разные весы, не беспокоясь о переполнении.Примечание: вышеуказанная функция не векторизована, поэтому она будет работать только с одним вводом значения;если вам нужно работать со значениями массива, то, по-видимому, другие решения уже доступны.

0 голосов
/ 29 сентября 2011

Похоже, что в Matlab, вероятно, есть 64-битные целые числа, и это число является наибольшим, которое факториал может вписать в него, прежде чем целое число выйдет из пространства. У меня нет Matlab, так что я не могу его проверить, но просто остановись и подумай о том, насколько большим будет множитель (век) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...