Информация об изменениях

Сообщение Re[3]: бесконечный цикл за конечное время от 02.12.2014 7:21

Изменено 02.12.2014 7:22 __kot3

Здравствуйте, 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".
Re[3]: бесконечный цикл за конечное время
Здравствуйте, 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".