Я пишу программу в Visual Studio 2012 Professional (Windows) на C / C ++, которая состоит из расчета многих полномочий с использованием pow()
, Я запустил профилировщик, чтобы выяснить, почему для запуска требуется так много времени, и обнаружил, что pow()
является узким местом.
Я переписал такие полномочия, как
pow(x,1.5)
в x*sqrt(x)
а также
pow(x,1.75)
в sqrt(x*x*x*sqrt(x))
что значительно улучшило скорость работы программы.
Несколько сил имеют вид pow(x,1.0/3.0)
поэтому я искал функцию кубического корня cbrt()
чтобы ускорить процесс, но он кажется недоступным в Visual Studio, который я с трудом могу себе представить, поэтому мой вопрос:
Где я могу найти cbrt()
функционировать в Visual Studio 2012 Professional и, если нет, каковы альтернативы, кроме pow(x,1.0/3.0)
?
С уважением,
Эрнст Ян
Этот сайт исследует несколько вычислительных методов для эффективного вычисления корня куба в C и имеет некоторый исходный код, который вы можете загрузить.
(РЕДАКТИРОВАТЬ: Поиск Google для «быстрый корень куба«предлагает еще несколько многообещающих хитов.)
Корни кубов представляют интерес, поскольку они используются во многих распространенных формулах, а функция быстрого корня куба не включена в Microsoft Visual Studio.
В отсутствие специальной функции кубического корня типичной стратегией является вычисление с помощью степенной функции (например, pow (x, 1.0 / 3.0)). Это может быть проблематично с точки зрения скорости и точности, когда отрицательные числа не обрабатываются должным образом.
На его сайте есть несколько тестов используемых методов. Все они намного быстрее, чем pow()
,
32-bit float tests ---------------------------------------- cbrt_5f 8.8 ms 5 mbp 6.223 abp pow 144.5 ms 23 mbp 23.000 abp halley x 1 31.8 ms 15 mbp 18.961 abp halley x 2 59.0 ms 23 mbp 23.000 abp newton x 1 23.4 ms 10 mbp 12.525 abp newton x 2 48.9 ms 20 mbp 22.764 abp newton x 3 72.0 ms 23 mbp 23.000 abp newton x 4 89.6 ms 23 mbp 23.000 abp
Смотрите сайт для загрузки источника.
Других решений пока нет …