求解释一个程序的有关问题

求解释一个程序的问题
这个是求一个方程的根的程序,为什么程序运行时不能输出正确的结果?求大神帮帮忙啊
#include "math.h"
#include "stdio.h"
void small(float a,float y,float m)
{
 extern x1,x2;
 x1=-y/2/a;
 x2=sqrt(abs(m))/2/a;
}
void media(float x,float y)
{
 extern x1,x2;
 x1=x2=-y/2.0/x;
}
void big(float x,float y,float m)
{
 extern x1,x2;
 x1=(-y+m)/(2.0*x);
 x2=(-y-m)/(2.0*x);
}
float x1,x2;
main()
{
 float a,b,c,detar;
 printf("input a,b,c:");
 scanf("%f,%f,%f",&a,&b,&c);
 detar=b*b-4*a*c;
 if(detar<0)
  {
   small(a,b,detar);
   printf("complex roots\nreal part=%.2f image part=%.2f\n",x1,x2);
  }
 else if(detar==0)
  {
   media(a,b);
   printf("x1=x2=%.2f\n",x1);
  }
 else
  {
   big(a,b,detar);
   printf("x1=%.2f x2=%.2f\n",x1,x2);
  }
}

------解决方案--------------------
自己调试啊
看寄存器的变化,一步一步来,慢慢地找出错误来
------解决方案--------------------
void small(float a,float y,float m)
void media(float x,float y)
void big(float x,float y,float m)

都没有返回值,在main中调用它们也是白调用,并不能改变main中的x1的值。