Как возводить число в квадрат. Численный эксперимент

Часто, не задумываясь, мы используем стандартные функции, например, вычисляя квадрат числа X, мы пишем z = Math.Pow(X,2). Другой вариант: z = X * X. Какой из них быстрее и во сколько раз?
Напишем простенькую программу, использующую класс DateTime. Чтобы разница была заметна, выполним возведение в квадрат N = 2 000 000 000 раз. Тогда:

using System;
namespace скорость_вычислений_квадрата_числа
{
    class Program
    {
        public static void Main()
        {
            int N = 2000000000;
            double x = 2;
            // Старт 1
            var dt = DateTime.Now;
            var tm = dt.Minute;
            var ts = dt.Second;
            // Старт 1
            var t = tm * 60 + ts;    
            for (int j=0; j < N; j++)
               x = Math.Pow(x,2.0);
            dt = DateTime.Now;
            tm = dt.Minute;
            ts = dt.Second;
            // Финиш 1
            t = tm * 60 + ts - t;
            Console.WriteLine("Через Pow(), секунд - " + t);
            // Старт 2
            dt = DateTime.Now;
            tm = dt.Minute;
            ts = dt.Second;
            t = tm * 60 + ts;
            for (int j = 0; j < N; j++)
                x = x * x;
            dt = DateTime.Now;
            tm = dt.Minute;
            ts = dt.Second;
            // Финиш 2
            t = tm * 60 + ts - t;
            Console.WriteLine("Перемножение, секунд - " + t);
            Console.ReadLine();
        }
    }
}

Результат на моем компьютере:
Через Pow(), секунд - 29
Перемножение, секунд - 9

Различие в три раза. Сделайте вывод.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх