what's wrong with this program?
#include <stdio.h>
#include <math.h>
double C[3], R, N[3];
double S[3], V[3];
void read_data()
{
scanf("%lf %lf %lf %lf %lf %lf %lf", C, C+1, C+2, N,
N+1, N+2, &R);
scanf("%lf %lf %lf %lf %lf %lf %lf", S, S+1, S+2, V,
V+1, V+2);
}
#define missed { printf("MISSED\n"); return;}
#define sqr(a) ((a) * (a))
void solve()
{
double a, b, c, delta, t, t1, x, y, z;
a = - 5*N[2];
b = N[0]*V[0] + N[1]*V[1] + N[2]*V[2];
c = N[0]*(S[0]-C[0]) + N[1]*(S[1]-C[1]) + N[2]*(S[2]-C
[2]);
if (fabs(a) < 0.0000001)
{
if (fabs(b) < 0.0000001) missed;
t = - c / b;
}
else
{
delta = b*b - 4*a*c;
if (delta < 0) missed;
delta = sqrt(delta);
t = (-b + delta) / (2*a);
t1 = (-b - delta) / (2*a);
if (t < 0 || (t1 >= 0 && t1 < t)) t = t1;
}
if (t < 0) missed;
x = S[0] + V[0] * t;
y = S[1] + V[1] * t;
z = S[2] + V[2] * t - 5*t*t;
if (sqr(x-C[0]) + sqr(y-C[1]) + sqr(z-C[2]) >= R*R-
0.000001) missed;
printf("HIT\n");
}
void main()
{
read_data();
solve();
}