но насколько я помню рекурсивные функции не инлайнятся
Прочитал в msdn, для этого надо:
#pragma inline_recursion(on) //причем действует только на следующую за ней функцию
#pragma inline_depth(10)
попробуй первоначальный вариант 2
Его на этапе компиляции считает
и замени параметры с double на size_t
А какая разница, это же unsigned int?
Переделал немного, теперь заработало.
В дисассемблере теперь много такого кода:
...
fstp qword ptr [esp+330h]
fld qword ptr [esp+328h]
fchs
... fchs, neg - это я так понимаю negative и float change sign.
А вот и код:
#include <iostream>
using namespace std;
#define NUM 100
#define type1 int
#define type2 double
#pragma inline_recursion(on)
#pragma inline_depth(NUM*2)
template <type1 size>
inline void inv(type2 d[])
{
d[size-1] = -d[size-1];
inv<size-1>(d);
}
template <>
inline void inv<1>(type2 d[])
{
d[0] = -d[0];
}
int main()
{
int i = 0;
cin >> i;
srand(i);
type2 d[NUM];
for(int i=0;i<NUM;i++)
d[i] = rand();
inv<NUM>(d);
for(int i=0;i<NUM;i++)
cout << d[i] << "\n";
return 0;
}
LogRus, спасибо за помощь