Лови, когда-то в институте писал
//***************************************************************
//** Метод Рунге-Кутта 4-го порядка точности.
//** Параметры: x,y - типа float,
//** h - шаг,
//** f - функция сорж. диф. уравнение.
float Runge4p(float x, float y,float h,float f(float,float))
{
float k1,k2,k3,k4,rez;
k1=h*f(x,y);
k2=h*f(x+h/2.0,y+k1/2.0);
k3=h*f(x+h/2.0,y+k2/2.0);
k4=h*f(x+h,y+k3);
return(y+(k1+2*k2+2*k3+k4)/6);
}
ну и нахера 4й порядок, если float используешь? а если размерность > 1 то что делать будешь? потом лучше писать не /2.0 и /6, а * 0.5 и *0.16666666666666666
А на счет 2.0 то это особенность компилятора, при работе с float и double если не поставишь 2.0 то получишь неявное преобразование результа выражения к int. Речь о Borland C++ 3.0 и 3.1 .