Re[3]: бесконечный цикл за конечное время
От: __kot3 США  
Дата: 02.12.14 07:21
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, как я это понимаю, мы переписываем этот цикл на два:

S>
S>T s = 0;
S>for(T k1 = 1; k1<K0; ++k1)
S>{
S>  s += k1 / pow(2, k1);
S>}
S>for(T k2 = K0; ; ++k2)
S>{
S>  s += 0; // т.к. k2/pow(2, k1) < epsilon для любого k2>=K0.
S>}
S>std::cout << s << std::endl;
S>

S>А после этого уже компилятор оптимизирует "прочь" цикл №2 как не имеющий побочных эффектов.

Если здесь — "k2/pow(2, k1)" — нет опечатки (действительно стоит k1, а не k2) — то это неверно (т.к. k1 фиксировано), если опечатка есть — то это тоже неверно, т.к. суммы 1/k (k = 1..inf) не существует. Как "оптимизировать" подобные циклы — есть куча статей в интернете, по теме "symbolical mathematics".
Отредактировано 02.12.2014 7:22 __kot3 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.