Discussion in 'C Programming' started by fb, Aug 30, 2004.

1. ### fbGuest

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;
}

fb, Aug 30, 2004

2. ### Arthur J. O'DwyerGuest

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

Arthur J. O'Dwyer, Aug 30, 2004

3. ### CBFalconerGuest

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?

CBFalconer, Aug 30, 2004
4. ### kalGuest

CBFalconer <> wrote in message news:<>...

> What is the square root of -1?

What is -1?

kal, Aug 30, 2004
5. ### dbtidGuest

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

dbtid, Aug 30, 2004
6. ### ArjanGuest

In message <z7EYc.52627\$>
dbtid <> 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

Arjan, Aug 30, 2004
7. ### Karthik KumarGuest

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.

Karthik Kumar, Sep 1, 2004