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

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

Перевел: 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 используется как объект (сущность) этого класса.
И для других функций рассчитывается тоже самое, но уже в конце идет завязка с sqrt.

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

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



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



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

Методы.
Sqrt1

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

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


Sqrt2

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

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




Sqrt3


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

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




Sqrt4


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




Sqrt5


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

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



Sqrt6

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

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


Sqrt7

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

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


Sqrt8

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

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


Sqrt9

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

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


Sqrt10

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

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



Sqrt11

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

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



Sqrt12


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

Алгоритм: Babylonian Method


Sqrt13

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


Sqrt14

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



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