Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Лучшие SQRT функции, сравнение

Участник
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
612
Реакции
504
Оригинал:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Перевел: @alexuiop1337
Введение.
Автор статьи, заметил, что во всех своих проектах он использовал стандартную функцию sqrt из Math.h , но этот факт заставил его найти новые методы получения корня. После некоторых поисков он нашел функции, которые были, гораздо быстрее привычной. Но всегда есть компромисс между скоростью и округлением. Главная идея статьи дать разработчикам выбор той функции, которая наиболее подходит их программе.

Плод статьи.
В этой статье сравниваются 14 функций, для вычисления квадратного корня, и стандартная функция sqrt. Для каждого из алгоритма будут рассчитаны показатели округления (точность - precision) и скорости, которые, в свою очередь, будут сравниваться с стандартным алгоритмом.

Что статья не освящает.
  1. Как работает каждый алгоритм
  2. Новый способы получения квадратного корня
Использование кода.
Скачать:
Пожалуйста, авторизуйтесь для просмотра ссылки.


1. main.cpp
Вызывает каждую функцию и подсчитывает точность и скорость, сравнивая с стандартным методом из Math.h.
2. SquareRootmethods.h
Этот заголовочный файл содержит сами методы и ссылки - сайты с которых функции эти были взяты.

Вначале будет рассчитаны точность и скорость стандартного метода взятия корня, и эти результаты будут использоваться, как точка сравнения, для других функций.

Для подсчета скорости, измеряется время, которое нужно для вызова функции (M-1) и это время используется в RefSpeed.

И для подсчета точности (округления) добавляется текущий результат к предыдущему в RefTotalPrecision, каждый раз, когда функция вызывается.

Для измерения run-time скорости функций будет использоваться CDuration, взятый
Пожалуйста, авторизуйтесь для просмотра ссылки.
. dir используется как объект (сущность) этого класса.
ZxyPfv0.png
И для других функций рассчитывается тоже самое, но уже в конце идет завязка с sqrt.
Dy34cWr.png

Замечания:
  1. Предполагается, что ошибка в точности, какой бы она ни была, равна эталонной, поэтому используется "abs". (Простите за кривой перевод)
  2. Процент скорости является точным, в то время как, процент точности указан уменьшенным. (Простите за кривой перевод)
Точки интереса.
Точность стандартной функции взятие корня идеальна, но вот скорость является не эталонным показателем, и даже, проигрывает в 3-5 раз.

После проведения 5 тестов и усреднения их итогов, получился такой результат:

TpXhiLA.png


Таблица лидеров этого исследования:

Performance3.PNG


Замечание: Производительность каждого из методов напрямую зависит от мощности ПК.

Методы.
Sqrt1

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.
+ некоторые изменения IEEE 32 bit floating point representation
4l9bryL.png


Sqrt2

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.


SW8Odfz.png


Sqrt3


Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.


b7y0erw.png


Sqrt4


Источник: -
Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.


NmI8ifn.png


Sqrt5


Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.


vnXX9EY.png

Sqrt6

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм: Зависит от IEEE representation и работает только в x32 программах

maVA0Qr.png

Sqrt7

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм: Зависит от IEEE representation и работает только в x32 программах

6zWFamS.png

Sqrt8

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.
[/url]

ZMRyOEF.png

Sqrt9

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.
[/url]

NNvGHV0.png

Sqrt10

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.


qLG0Ona.png

Sqrt11

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм: Newton's Approximation Method

exbc80q.png


Sqrt12


Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Алгоритм: Babylonian Method

aTkmK0b.png

Sqrt13

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
-
Алгоритм: Assembly fsqrt

FdH3T38.png

Sqrt14

Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
-
Алгоритм: Assembly fsqrt2

7Ifol6L.png


Замечание: Алгоритмы без циклов работают быстрее.
 
Назад
Сверху Снизу