Час назад я написал такой код, чтобы проверить правильность решенной мною задачи:
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! шагов могут вычислить. Но все же, как долго еще будет выполняться мой код, как можно это узнать?
Предположим, что у вас топовый процессор из 8 ядер с частотой 4 ГГц. Такой проц может выдавать 8*4*1024*1024*1024 = 2^35 тактов в секунду.
Ваш цикл будет включать long.MaxValue = 2^63 итераций. Каждая итерация включает в себя:
Зажмурив глаза, представим, что на одну такую итерацию будет уходить 4 такта процессора. Т.е. на обсчет вашего цикла уйдет не меньше 2^65 тактов.
Давайте считать, всего 2^65 тактов, скорость 2^35 такта в секунду, получаем 2^30 секунд. Это где-то 34 года =)
Для того, что вы пытаетесь посчитать, существует формула:
Хотя зачем программисту учить математику...
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости