Velocity Reviews > Quadratic Formula Woes

fb
Guest
Posts: n/a

 08-29-2004
Hello everyone. I'm having a touch of trouble solving a problem using
the quadratic formula. I get a domain error...Somewhere in the sqrt
function I think. Could you guys give me a hint on what's up? Is there
maybe some kind of standard Quadratic function hiding away in the
libraries? That would be nice to have...Here's my source:

/* Trying to calculate the real roots of "ax^2 + bx + c = 0"

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
double a, b, c, d, x1, x2;

printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
printf("c = ");
scanf("%f", &c);

/* Carry out the calculations */

d = sqrt(b*b-4*a*c);
x1 = (-b + d) / (2 * a);
x2 = (-b - d) / (2 * a);

/* Display output */

printf("\nx1 = %e x2 = %e", x1, x2);

return EXIT_SUCCESS;
}

Arthur J. O'Dwyer
Guest
Posts: n/a

 08-30-2004

On Sun, 29 Aug 2004, fb wrote:
>
> /* Trying to calculate the real roots of "ax^2 + bx + c = 0"
> using the quadratic formula */
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
>
> int main(void)
> {
> double a, b, c, d, x1, x2;
>
> /* read input data */
>
> printf("a = ");

Here you need a
fflush(stdout);

> scanf("%f", &a);

This should be
scanf("%lf", &a);
and it's probably what's causing your troubles.

The same two comments apply twice again below.

> printf("b = ");
> scanf("%f", &b);
> printf("c = ");
> scanf("%f", &c);
>
> /* Carry out the calculations */

Before doing anything else, you should be printing out the values
of 'a', 'b', and 'c', just to make sure you read them correctly.
Printing intermediate results is an important debugging technique
in /any/ language.

> d = sqrt(b*b-4*a*c);

If the quadratic has no real-number solutions, this will cause
a domain error. Could your problem be simply that you're trying

> x1 = (-b + d) / (2 * a);
> x2 = (-b - d) / (2 * a);
>
> /* Display output */
>
> printf("\nx1 = %e x2 = %e", x1, x2);

Better use "%g" unless you know what you're doing. And you
need to end the output with a newline.

printf("\nx1 = %g x2 = %g\n", x1, x2);

> return EXIT_SUCCESS;
> }

HTH,
-Arthur

CBFalconer
Guest
Posts: n/a

 08-30-2004
fb wrote:
>
> Hello everyone. I'm having a touch of trouble solving a problem
> using the quadratic formula. I get a domain error...Somewhere in
> the sqrt function I think. Could you guys give me a hint ... snip

What is the square root of -1?

--
A: Because it fouls the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

kal
Guest
Posts: n/a

 08-30-2004
CBFalconer <(E-Mail Removed)> wrote in message news:<(E-Mail Removed)>...

> What is the square root of -1?

What is -1?

dbtid
Guest
Posts: n/a

 08-30-2004
CBFalconer wrote:

> fb wrote:
>
>>Hello everyone. I'm having a touch of trouble solving a problem
>>using the quadratic formula. I get a domain error...Somewhere in
>>the sqrt function I think. Could you guys give me a hint ... snip

>
>
> What is the square root of -1?
>

i

Arjan
Guest
Posts: n/a

 08-30-2004
In message <z7EYc.52627\$(E-Mail Removed)>
dbtid <(E-Mail Removed)> wrote:

> CBFalconer wrote:
>
> > fb wrote:
> >
> >>Hello everyone. I'm having a touch of trouble solving a problem
> >>using the quadratic formula. I get a domain error...Somewhere in
> >>the sqrt function I think. Could you guys give me a hint ... snip

> >
> >
> > What is the square root of -1?
> >

>
> i
>
>

tsk, tsk... Not true, but i squared equals -1

Arjan

Karthik Kumar
Guest
Posts: n/a

 09-01-2004
fb wrote:

> Hello everyone. I'm having a touch of trouble solving a problem using
> the quadratic formula. I get a domain error...Somewhere in the sqrt
> function I think. Could you guys give me a hint on what's up? Is there
> maybe some kind of standard Quadratic function hiding away in the
> libraries? That would be nice to have...Here's my source:
>
> /* Trying to calculate the real roots of "ax^2 + bx + c = 0"
> using the quadratic formula */
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
>
> int main(void)
> {
> double a, b, c, d, x1, x2;
>
> /* read input data */
>
> printf("a = ");
> scanf("%f", &a);
> printf("b = ");
> scanf("%f", &b);
> printf("c = ");
> scanf("%f", &c);
>
> /* Carry out the calculations */
>
> d = sqrt(b*b-4*a*c);

You are making the assumption that b^2 - 4ac is always >= 0 .
May be you need to be a guard here, that checks in case they end up
being -ve numbers.

> x1 = (-b + d) / (2 * a);
> x2 = (-b - d) / (2 * a);
>
> /* Display output */
>
> printf("\nx1 = %e x2 = %e", x1, x2);
>
> return EXIT_SUCCESS;
> }
>

--
Karthik.