![]()  | 
![]() ![]() ![]() ![]()  | 
![]()  | 
Comparison of Nth-root Finding AlgorithmsBoost , Math Toolkit 2.5.0 , Comparison of Root Finding Algorithms
  
  
   | 
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
                   Функция  | 
                   Запрошенная точность  | 
|---|---|
TOMS748  | 
numeric_limits  | 
Ньютон  | 
этаж (число_лимиты  | 
Галлей  | 
этаж (число_лимиты  | 
Schröder  | 
этаж (число_лимиты  | 
В тестах использовались Microsoft Visual Studio 2013 (Update 1) и GCC 4.9.1 с использованием исходного кодаroot_n_finding_algorithms.cpp.
Неопределенность времени (особенно при использовании MSVC) составляет не менее 5% от нормированного времени.
Чтобы выбрать «лучшие» и «худшие» алгоритмы выделены синим и красным цветом. Более чем один результат может быть «лучшим», когда нормализованные времена неразличимы в пределах неопределенности.
Фракция полной точности 1
Table 12.3. 5th root(28) for float, double, long double and cpp_bin_float_50 types, using _X86_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
7  | 
320  | 
1.53  | 
                   0  | 
11  | 
576  | 
                   2.61  | 
1  | 
11  | 
557  | 
2.48  | 
1  | 
12  | 
119843  | 
7.52  | 
                   0  | 
||||
Ньютон  | 
3  | 
                   209  | 
1.00  | 
                   0  | 
4  | 
221  | 
1.00  | 
-1  | 
4  | 
225  | 
1.00  | 
-1  | 
6  | 
15937  | 
1.00  | 
                   0  | 
||||
Галлей  | 
2  | 
                   214  | 
                   1.02  | 
                   0  | 
3  | 
                   256  | 
1.16  | 
                   0  | 
3  | 
243  | 
1.08  | 
                   0  | 
4  | 
28437  | 
                   1.78  | 
                   0  | 
||||
Schröder  | 
2  | 
218  | 
                   1.04  | 
                   0  | 
3  | 
245  | 
1.11  | 
-1  | 
3  | 
245  | 
1.09  | 
-1  | 
4  | 
35625  | 
2.24  | 
                   0  | 
Table 12.4. 7th root(28) for float, double, long double and cpp_bin_float_50 types, using _X86_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
493  | 
                   2.18  | 
1  | 
15  | 
                   762  | 
3.05  | 
2  | 
15  | 
765  | 
3.08  | 
2  | 
14  | 
                   157343  | 
                   7.09  | 
                   0  | 
||||
Ньютон  | 
5  | 
226  | 
1.00  | 
                   0  | 
6  | 
                   250  | 
1.00  | 
                   0  | 
6  | 
248  | 
1.00  | 
                   0  | 
                   8  | 
22187  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
                   257  | 
1.14  | 
                   0  | 
5  | 
293  | 
1.17  | 
                   0  | 
5  | 
293  | 
                   1.18  | 
                   0  | 
6  | 
44062  | 
                   1.99  | 
                   0  | 
||||
Schröder  | 
5  | 
                   285  | 
1.26  | 
                   0  | 
6  | 
317  | 
1.27  | 
                   0  | 
6  | 
317  | 
                   1.28  | 
                   0  | 
7  | 
61406  | 
2.77  | 
                   0  | 
Table 12.5. 11th root(28) for float, double, long double and cpp_bin_float_50 types, using _X86_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
556  | 
2.24  | 
-2  | 
14  | 
                   784  | 
2,94  | 
2  | 
14  | 
                   793  | 
2,94  | 
2  | 
                   17  | 
235781  | 
8.88  | 
2  | 
||||
Ньютон  | 
6  | 
248  | 
1.00  | 
                   0  | 
7  | 
267  | 
1.00  | 
                   0  | 
7  | 
270  | 
1.00  | 
                   0  | 
                   9  | 
26562  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
                   254  | 
                   1.02  | 
-1  | 
5  | 
290  | 
1.09  | 
                   0  | 
5  | 
293  | 
1.09  | 
                   0  | 
6  | 
46406  | 
1,75  | 
                   0  | 
||||
Schröder  | 
6  | 
312  | 
1.26  | 
                   0  | 
7  | 
351  | 
1.31  | 
                   0  | 
7  | 
                   356  | 
1.32  | 
                   0  | 
                   8  | 
76250  | 
                   2.87  | 
                   0  | 
Фракция полной точности 1
Table 12.6. 5th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_AVX
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
7  | 
239  | 
                   1.50  | 
                   0  | 
11  | 
451  | 
2.53  | 
1  | 
11  | 
439  | 
2.49  | 
1  | 
12  | 
90312  | 
7.51  | 
                   0  | 
||||
Ньютон  | 
3  | 
159  | 
1.00  | 
                   0  | 
4  | 
178  | 
1.00  | 
-1  | 
4  | 
176  | 
1.00  | 
-1  | 
6  | 
12031  | 
1.00  | 
                   0  | 
||||
Галлей  | 
2  | 
168  | 
1.06  | 
                   0  | 
3  | 
203  | 
1.14  | 
                   0  | 
3  | 
                   198  | 
                   1.13  | 
                   0  | 
4  | 
                   20937  | 
                   1.74  | 
                   0  | 
||||
Schröder  | 
2  | 
173  | 
1.09  | 
                   0  | 
3  | 
206  | 
1.16  | 
-1  | 
3  | 
203  | 
1.15  | 
-1  | 
4  | 
26250  | 
                   2.18  | 
                   0  | 
Table 12.7. 7th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_AVX
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
385  | 
2.19  | 
1  | 
15  | 
635  | 
                   3.13  | 
2  | 
15  | 
621  | 
3.17  | 
2  | 
14  | 
114843  | 
6.81  | 
                   0  | 
||||
Ньютон  | 
5  | 
176  | 
1.00  | 
                   0  | 
6  | 
203  | 
1.00  | 
                   0  | 
6  | 
196  | 
1.00  | 
                   0  | 
                   8  | 
16875  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
                   209  | 
1.19  | 
                   0  | 
5  | 
                   254  | 
1.25  | 
                   0  | 
5  | 
                   246  | 
1.26  | 
                   0  | 
6  | 
32343  | 
1,92  | 
                   0  | 
||||
Schröder  | 
5  | 
223  | 
1.27  | 
                   0  | 
6  | 
273  | 
1.34  | 
                   0  | 
6  | 
275  | 
1.40  | 
                   0  | 
7  | 
45156  | 
2.68  | 
                   0  | 
Table 12.8. 11th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_AVX
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
                   467  | 
2,42  | 
-2  | 
14  | 
648  | 
3.06  | 
2  | 
14  | 
640  | 
2.99  | 
2  | 
                   17  | 
170000  | 
8,85  | 
2  | 
||||
Ньютон  | 
6  | 
193  | 
1.00  | 
                   0  | 
7  | 
212  | 
1.00  | 
                   0  | 
7  | 
                   214  | 
1.00  | 
                   0  | 
                   9  | 
                   19218  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
                   209  | 
1.08  | 
-1  | 
5  | 
                   256  | 
                   1.21  | 
                   0  | 
5  | 
                   250  | 
1.17  | 
                   0  | 
6  | 
32656  | 
1,70  | 
                   0  | 
||||
Schröder  | 
6  | 
248  | 
                   1.28  | 
                   0  | 
7  | 
306  | 
1.44  | 
                   0  | 
7  | 
                   298  | 
                   1.39  | 
                   0  | 
                   8  | 
53437  | 
2.78  | 
                   0  | 
Фракция полной точности 1
Table 12.9. 5th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
7  | 
193  | 
2.14  | 
                   0  | 
11  | 
432  | 
                   3.86  | 
1  | 
                   9  | 
579  | 
3,83  | 
                   0  | 
12  | 
                   59062  | 
7.56  | 
                   0  | 
||||
Ньютон  | 
3  | 
                   90  | 
1.00  | 
                   0  | 
4  | 
112  | 
1.00  | 
-1  | 
5  | 
151  | 
1.00  | 
                   0  | 
6  | 
7812  | 
1.00  | 
                   0  | 
||||
Галлей  | 
2  | 
98  | 
1.09  | 
                   0  | 
3  | 
135  | 
                   1.21  | 
                   0  | 
3  | 
                   201  | 
1.33  | 
                   0  | 
4  | 
13750  | 
                   1.76  | 
                   0  | 
||||
Schröder  | 
2  | 
112  | 
                   1.24  | 
                   0  | 
3  | 
142  | 
1.27  | 
-1  | 
3  | 
206  | 
1.36  | 
                   0  | 
4  | 
17031  | 
                   2.18  | 
                   0  | 
Table 12.10. 7th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
351  | 
1.97  | 
1  | 
15  | 
621  | 
3.18  | 
2  | 
13  | 
906  | 
                   3.61  | 
                   0  | 
14  | 
75468  | 
7.10  | 
                   0  | 
||||
Ньютон  | 
5  | 
178  | 
1.00  | 
                   0  | 
6  | 
                   195  | 
1.00  | 
                   0  | 
7  | 
                   251  | 
1.00  | 
                   0  | 
                   8  | 
10625  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
196  | 
1.10  | 
                   0  | 
5  | 
242  | 
                   1.24  | 
                   0  | 
5  | 
                   345  | 
1.37  | 
                   0  | 
6  | 
                   21093  | 
                   1.99  | 
                   0  | 
||||
Schröder  | 
5  | 
225  | 
1.26  | 
                   0  | 
6  | 
270  | 
                   1.38  | 
                   0  | 
6  | 
                   384  | 
1.53  | 
                   0  | 
7  | 
29062  | 
2,74  | 
                   0  | 
Table 12.11. 11th root(28) for float, double, long double and cpp_bin_float_50 types, using _X64_SSE2
| 
                   плавать  | 
                   двойной  | 
                   длинный  | 
                   pp50  | 
|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Алго  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
Его  | 
Время  | 
                   Norm  | 
Дис  | 
||||
TOMS748  | 
12  | 
                   429  | 
2.22  | 
-2  | 
14  | 
                   679  | 
3.02  | 
2  | 
14  | 
                   1098  | 
3.94  | 
1  | 
                   17  | 
114531  | 
                   8.83  | 
2  | 
||||
Ньютон  | 
6  | 
193  | 
1.00  | 
                   0  | 
7  | 
225  | 
1.00  | 
                   0  | 
7  | 
279  | 
1.00  | 
                   0  | 
                   9  | 
12968  | 
1.00  | 
                   0  | 
||||
Галлей  | 
4  | 
196  | 
                   1.02  | 
-1  | 
5  | 
248  | 
1.10  | 
                   0  | 
5  | 
348  | 
1.25  | 
                   0  | 
6  | 
21718  | 
1.67  | 
                   0  | 
||||
Schröder  | 
6  | 
                   254  | 
1.32  | 
                   0  | 
7  | 
323  | 
1.44  | 
                   0  | 
7  | 
                   453  | 
                   1.62  | 
                   0  | 
                   8  | 
35625  | 
2,75  | 
                   0  | 
Из этого ограниченного упражнения можно сделать некоторые предварительные выводы.
double>.double>позволяет сходимость к конечному точному результату в одной или двух итерациях. Поэтому в этом надуманном примере, грубо разделив показатель на N для «угадывания», было бы гораздо лучше использовать функцию<pow<double>>или, если точнее,<pow<longdouble>>для оценки «угадывания». Ограничение этой тактики состоит в том, что диапазон возможных (экспонентных) значений может быть меньше многоточного типа.Очевидно, что ваш пробегбудет варьироваться, но в целомитерация Ньютона-Рафсонакажется первым выбором алгоритма и попыткой найти хорошую «угадку» первой цели ускорения, особенно дляBoost.Multiprecision. И, конечно же, оптимизация компилятора имеет решающее значение для скорости.
Статья Comparison of Nth-root Finding Algorithms раздела Math Toolkit 2.5.0 Comparison of Root Finding Algorithms может быть полезна для разработчиков на c++ и boost.
:: Главная :: Comparison of Root Finding Algorithms ::
реклама  |