Как узнать, как долго будут вычисляться функция из long.MaxValue шагов?

227
19 августа 2018, 17:50

Час назад я написал такой код, чтобы проверить правильность решенной мною задачи:

    static void Main(string[] args)
    {
        double sum = 0;
        for (long i = 1; i < long.MaxValue; i++)
        {
            if (i % 2 == 0)
            {
                sum -= 1.0 / (double)i;
            }
            else
            {
                sum += 1.0 / (double)i;
            }
        }
        Console.WriteLine("Ln(2) = " + Math.Log(2));
        Console.WriteLine("Our sum: " + sum);
        Console.ReadKey();
    }

Но до сих пор я не получил результат.. Как я понимаю long.MaxValue шагов это слишком много, но это 20!, что не так уж и много, ибо я был уведомлен, что сейчас компьютеры и 150! шагов могут вычислить. Но все же, как долго еще будет выполняться мой код, как можно это узнать?

Answer 1

Предположим, что у вас топовый процессор из 8 ядер с частотой 4 ГГц. Такой проц может выдавать 8*4*1024*1024*1024 = 2^35 тактов в секунду.

Ваш цикл будет включать long.MaxValue = 2^63 итераций. Каждая итерация включает в себя:

  1. остаток по модулю
  2. проверку условия
  3. деление
  4. вычитание

Зажмурив глаза, представим, что на одну такую итерацию будет уходить 4 такта процессора. Т.е. на обсчет вашего цикла уйдет не меньше 2^65 тактов.

Давайте считать, всего 2^65 тактов, скорость 2^35 такта в секунду, получаем 2^30 секунд. Это где-то 34 года =)

Для того, что вы пытаетесь посчитать, существует формула:

Хотя зачем программисту учить математику...

READ ALSO
Проверка транзакции

Проверка транзакции

есть два биткоин кошелька, подскажите, как через php проверить транзакцию-был ли сделан перевод на на второй кошелек и подтвержден ли он?

210
долгая загрузка модели нейронной сети

долгая загрузка модели нейронной сети

есть нейронная сеть, она является чат-ботомс сайта отправляется ajax-запрос на php, он через shell_exec запускает питон и получает от него ответ, который...

235
Как правильно сделать такой цикл?

Как правильно сделать такой цикл?

Как сделать так, чтобы если счет у пользователя был меньше нуля после покупки, то покупка отменяется? Ps есть наработка самого цикла

212