Кубический корень в С++
Нет такого, насколько мне известно. Чем плохо возводить число в степень 1/3.0 ?
здесь .
Судя по вопросам, тебе кроме этой книги, которую я посоветовать не могу , нужна справка по функциям C Runtime Library, связанным с математикой. Для MSVC 6 это Или даже 0.3333333333333
Да, ты забыл
Забыл. Там всё нормально.
pow(x, 1/3);
pow(x, 1./3);
книжка: NUMERICAL RECIPES IN C - есть в инете
Или даже 0.3333333333333это уже пижонстов, компилятор и так выполнит вычиления между константами.
когда я получил такую привычку в наследство от школьного препода информатики, я еще не знал о принципах работы компиляторов
Самое понтовое - это exp(ln(x)/3)
exp(ln(x)/3) - это наверное подольше будет чем pow
Если надо быстро - лучше всего ряд написать самому
а если еще быстрее - табличку
всего 355 тактов (! правда
double __declspec(noinline) mysqrt3_v2(double x)
{
return(exp(log(x)/3.;
00401490 fld qword ptr [esp+4]
00401494 fldln2
00401496 fxch st(1)
00401498 fyl2x
0040149A fmul qword ptr [3fd5555555555555 (403120h)]
004014A0 fldl2e
004014A2 fmulp st(1st
004014A4 fld st(0)
004014A6 frndint
004014A8 fxch st(1)
004014AA fsub st,st(1)
004014AC f2xm1
004014AE fld1
004014B0 faddp st(1st
004014B2 fscale
004014B4 fstp st(1)
}
004014B6 ret
вообще 344 такта, но разница не принципиальная.
double __declspec(noinline) mysqrt3_v1(double x)
{
return(pow(x,1/3.;
00401480 fld qword ptr [esp+4]
00401484 fld qword ptr [3fd5555555555555 (403120h)]
0040148A call _CIpow (401EF8h)
}
0040148F ret
Зато вот если нужно сразу скажем 5 корней сосчитать, то
x1[0] = mysqrt3_v1(2.);
x1[1] = mysqrt3_v1(3.);
x1[2] = mysqrt3_v1(4.);
x1[3] = mysqrt3_v1(6.);
x1[4] = mysqrt3_v1(7.);
//1671 такт
потому что вызовы pow производятся поочереди, а instrinsic exp и log конвейеризуются. А ряды и таблички вообще лесом идут, учите мат. часть!
x2[0] = mysqrt3_v2(2.);
x2[1] = mysqrt3_v2(3.);
x2[2] = mysqrt3_v2(4.);
x2[3] = mysqrt3_v2(5.);
x2[4] = mysqrt3_v2(6.);
//753 такта
Оставить комментарий
AndrewAAndrew
Я, наверное, всех достал своими вопросамиКак выглядит функция для кубического корня в С++?
Может кто посоветует книгу, где хорошо описаны численные методы ( с листингом в С++, где-то видел такую).