-
Автор темы
- #1
Оригинал:
Перевел: alexuiop1337
Введение.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Перевел: alexuiop1337
Автор статьи, заметил, что во всех своих проектах он использовал стандартную функцию sqrt из Math.h , но этот факт заставил его найти новые методы получения корня. После некоторых поисков он нашел функции, которые были, гораздо быстрее привычной. Но всегда есть компромисс между скоростью и округлением. Главная идея статьи дать разработчикам выбор той функции, которая наиболее подходит их программе.
Плод статьи.
В этой статье сравниваются 14 функций, для вычисления квадратного корня, и стандартная функция sqrt. Для каждого из алгоритма будут рассчитаны показатели округления (точность - precision) и скорости, которые, в свою очередь, будут сравниваться с стандартным алгоритмом.
Что статья не освящает.
- Как работает каждый алгоритм
- Новый способы получения квадратного корня
Скачать:
Пожалуйста, авторизуйтесь для просмотра ссылки.
1. main.cpp
Вызывает каждую функцию и подсчитывает точность и скорость, сравнивая с стандартным методом из Math.h.
2. SquareRootmethods.h
Этот заголовочный файл содержит сами методы и ссылки - сайты с которых функции эти были взяты.
Вначале будет рассчитаны точность и скорость стандартного метода взятия корня, и эти результаты будут использоваться, как точка сравнения, для других функций.
Для подсчета скорости, измеряется время, которое нужно для вызова функции (M-1) и это время используется в RefSpeed.
И для подсчета точности (округления) добавляется текущий результат к предыдущему в RefTotalPrecision, каждый раз, когда функция вызывается.
Для измерения run-time скорости функций будет использоваться CDuration, взятый
Пожалуйста, авторизуйтесь для просмотра ссылки.
. dir используется как объект (сущность) этого класса.Замечания:
- Предполагается, что ошибка в точности, какой бы она ни была, равна эталонной, поэтому используется "abs". (Простите за кривой перевод)
- Процент скорости является точным, в то время как, процент точности указан уменьшенным. (Простите за кривой перевод)
Точность стандартной функции взятие корня идеальна, но вот скорость является не эталонным показателем, и даже, проигрывает в 3-5 раз.
После проведения 5 тестов и усреднения их итогов, получился такой результат:
Таблица лидеров этого исследования:
Замечание: Производительность каждого из методов напрямую зависит от мощности ПК.
Методы.
Sqrt1
Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.
+ некоторые изменения IEEE 32 bit floating point representationSqrt2
Источник:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Алгоритм:
Пожалуйста, авторизуйтесь для просмотра ссылки.
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
Замечание: Алгоритмы без циклов работают быстрее.