Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 10:15   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию Где узнать точные циферы?

В общем тестирую длинную арифметику. Все считается и работатет вроде . Тестил на малых величинах, все ОК. И вот чего-то озаботился ну и посчитал факториал для 100, 200 и 500. И чего-то усомнился в этих рядах циферок. Где бы мне проверить не брешет ли мой интерпретатор при больших вычислениях?
ЗЫ. Попутный вопрос. При вычислении 500! компилятор вдруг обиделся и сказал про переполнение стека (кто бы мог подумать ), ну я его увеличил (за счет увеличения верхней границы). Правильно ли я поступил, может правильней как-то поступить по другому (ну скажем за счет уменьшения нижней границы или еще как)? Сейчас на холостом ходу прога кушает около 9 мегов памяти, при вычислениях 12-13.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 24.12.2009, 10:20   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
По умолчанию

Тут: http://www.numberempire.com/factorialcalculator.php
Да и вообще хороший сайт : http://www.numberempire.com/
А не счет стека: по моему, нужно его сделать регулируемым и чтобы можно было изменять его размер во время интерпретирования программы. Люблю я гибкость =)
Цитата:
Как в нем программно регулировать стек?
В делфе не знаю, я думал Вы про свой интерпретатор.
Цитата:
ну я его увеличил
Что-то я запутался .

Последний раз редактировалось Levsha100; 24.12.2009 в 10:48.
Levsha100 вне форума Ответить с цитированием
Старый 24.12.2009, 10:33   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Не врет, зараза !
А насчет стека хотелось бы поподробней, писано на Дельфи. Как в нем программно регулировать стек? И как узнать сколько для полного счастья мне надо?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 24.12.2009, 10:55   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Эммм..... а может считать нерекурсивно лучше ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 24.12.2009, 11:01   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Необходимый размер стека можно высчитать, зная алгоритм к-рый приводит к его переполнению. Т.е. умножить кол-во вызовов на кол-во байт помещаемых каждый раз в стек.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 24.12.2009, 11:01   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Действительно, а если Вам захочется 1000! ? Не хватит стека ВСЕХ компьютеров в мире.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.12.2009, 11:45   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Действительно, а если Вам захочется 1000! ? Не хватит стека ВСЕХ компьютеров в мире.
А если некоторые промежуточные результаты, которые в ближайшее время не понадобятся, временно помещать из стэка в другое место?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 24.12.2009, 12:55   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
А если некоторые промежуточные результаты, которые в ближайшее время не понадобятся, временно помещать из стэка в другое место?
Какие например?

Цитата:
Эммм..... а может считать нерекурсивно лучше ?
Дык интерпретатору пофигу, ему дали программу вот он считает. И вообще как Вы себе это представляете? Что я скажу программистам? "Так парни, вот отличный интерпретатор, он все умеет, все знает и все может. Вот только ни в коем случае не считаете рекурсию". Так что ли? Это классический способ вычисления факториала - рекурсивный вызов (кроме того, я еще дополнительно через данную прогу провожу тестирование некоторых блоков интерпретатора).
Вот сам код:
Код:
# Это пример рекурсии для 200!
Дано: х; у
х=200
у=Факториал(х)
х=выведем_строку_на_экран(у; 'Результат вычислений для '+х+'!')

# Здесь описана функция вычисления факториала
реализация метода Факториал(х)
фрагмент
        Если х=1 тогда
       фрагмент
                  Факториал=1
       конец фрагмента
      Иначе
     фрагмент
                 Факториал=х*Факториал(х-1)
     конец фрагмента 
конец фрагмента
Цитата:
Необходимый размер стека можно высчитать, зная алгоритм к-рый приводит к его переполнению. Т.е. умножить кол-во вызовов на кол-во байт помещаемых каждый раз в стек.
Верный подход, но не годиться. Выполнение указанного кода это огромное переплетение функций (разбор выражений, разбор функций, разбор программы, синтаксическая проверка, длинная арифметика, спецфункции по работе со строками и т.д.). Часть из них рекурсивна, часть вызывает себя через некоторые другие. Проект уже довольно-таки большой.

Цитата:
Действительно, а если Вам захочется 1000! ? Не хватит стека ВСЕХ компьютеров в мире.
Ну я честно говоря так и хотел, чтобы подсчет не зависил от разрядов процессора. Кроме того, основная проблема в том, что он берется за вычисление 1000!, но невозможно точно определить хватит ему на это стека или нет (кстати, можно проверить опытным путем, за ночь наверно посчитает ).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 24.12.2009 в 13:00.
Utkin вне форума Ответить с цитированием
Старый 24.12.2009, 13:12   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

У Кнута в книжке есть вот такая формула для расчета примерного значения.

Там же есть еще пара страниц, посвященных расчету факториала разными способами.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 24.12.2009 в 13:17.
Goodwin98 вне форума Ответить с цитированием
Старый 24.12.2009, 13:15   #10
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это классический способ вычисления факториала - рекурсивный вызов
Я бы сказал, это классический идиотский академический способ запутать школьников и студентов. :)
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где можно узнать о предстоящих компьютерных выставках в Питере Kn793 Свободное общение 1 01.12.2009 21:29
Как програмно можно узнать где находится программа Vol666 Общие вопросы Delphi 11 30.07.2009 20:58
Как узнать путь где щас мой exe zotox Помощь студентам 2 26.03.2009 23:38
Как сделать более точные координаты мышки xGroupers Общие вопросы Delphi 7 24.04.2008 23:02
Где узнать текущее разрешение экрана? Teksa Помощь студентам 2 07.09.2007 17:19