470,870 Members | 1,431 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,870 developers. It's quick & easy.

problem with double data in exponential form

Hi, can anyone please tell me what is wrong in this program and why
does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>

#define PLANCK 6.626068e10-34
int main(void)
{
double freq;

printf("Enter frequency");
scanf("%e",&freq);
double energy = PLANCK * freq;

printf("\n%f", energy);
return 0;

}
Jun 27 '08 #1
8 4917
On Apr 14, 10:44*am, pereges <Brol...@gmail.comwrote:
Hi, can anyone please tell me what is wrong in this program and why
does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>

#define PLANCK 6.626068e10-34

int main(void)
{
* * * * double freq;

* * * * printf("Enter frequency");
* * * * * * * * scanf("%e",&freq);
foo.c: (in function main)
foo.c(13,28): Format argument 1 to scanf (%e) expects float * gets
double *:
* * * * * * * * double energy = PLANCK * freq;

* * * * * * * * printf("\n%f", energy);
* * * * * * * * return 0;

}- Hide quoted text -

- Show quoted text -
Jun 27 '08 #2
On Apr 14, 10:44*am, pereges <Brol...@gmail.comwrote:
Hi, can anyone please tell me what is wrong in this program and why
does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>

#define PLANCK 6.626068e10-34

int main(void)
{
* * * * double freq;

* * * * printf("Enter frequency");
* * * * * * * * scanf("%e",&freq);
* * * * * * * * double energy = PLANCK * freq;

* * * * * * * * printf("\n%f", energy);
* * * * * * * * return 0;

}- Hide quoted text -

- Show quoted text -
P.S.
From the C-FAQ:
12.13: Why doesn't this code:

double d;
scanf("%f", &d);

work?

A: Unlike printf(), scanf() uses %lf for values of type double,
and
%f for float. See also question 12.9.
Jun 27 '08 #3
>Hi, can anyone please tell me what is wrong in this program and why
>does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>
Is this really supposed to be a constant slightly different from
6.626068e10 ?
>#define PLANCK 6.626068e10-34
Use parentheses.
> double energy = PLANCK * freq;
This expands to:

double energy = 6.626068e10-34 * freq;
which means:
double energy = (6.626068e10) - (34 * freq);
which I don't think is what you really mean.

I recommend you use at least one pair of unnecessary parentheses:

#define PLANCK (((6.626068e10) - (34)))

Jun 27 '08 #4
On Apr 14, 11:05 pm, user923005 <dcor...@connx.comwrote:
P.S.
From the C-FAQ:
12.13: Why doesn't this code:

double d;
scanf("%f", &d);

work?

A: Unlike printf(), scanf() uses %lf for values of type double,
and
%f for float. See also question 12.9.
I changed it to:

double freq;
printf("Enter frequency");
scanf("%lf",&freq);
double energy = PLANCK * freq;
printf("\n%e", energy);
getting some negative garbage value now.
Jun 27 '08 #5
On Apr 14, 11:11*am, pereges <Brol...@gmail.comwrote:
On Apr 14, 11:05 pm, user923005 <dcor...@connx.comwrote:
P.S.
From the C-FAQ:
12.13: *Why doesn't this code:
* * * * * * * * double d;
* * * * * * * * scanf("%f", &d);
* * * * work?
A: * * *Unlike printf(), scanf() uses %lf for values of type double,
and
* * * * %f for float. *See also question 12.9.

I changed it to:

double freq;
printf("Enter frequency");
scanf("%lf",&freq);
double energy = PLANCK * freq;
printf("\n%e", energy);

getting some negative garbage value now.
From:
http://physics.nist.gov/cgi-bin/cuu/Value?h

static const double planck = 6.62606896e-34;
Jun 27 '08 #6
On Apr 14, 11:36*am, user923005 <dcor...@connx.comwrote:
On Apr 14, 11:11*am, pereges <Brol...@gmail.comwrote:


On Apr 14, 11:05 pm, user923005 <dcor...@connx.comwrote:
P.S.
From the C-FAQ:
12.13: *Why doesn't this code:
* * * * * * * * double d;
* * * * * * * * scanf("%f", &d);
* * * * work?
A: * * *Unlike printf(), scanf() uses %lf for values of type double,
and
* * * * %f for float. *See also question 12.9.
I changed it to:
double freq;
printf("Enter frequency");
scanf("%lf",&freq);
double energy = PLANCK * freq;
printf("\n%e", energy);
getting some negative garbage value now.

From:http://physics.nist.gov/cgi-bin/cuu/Value?h

static const double planck = 6.62606896e-34;- Hide quoted text -

- Show quoted text -
#include <stdio.h>

// Standard value:
static const double planck = 6.62606896e-34;
// 2005 National Physical Laboratory value:
static const double planck2 = 6.62607095e-34;

int main(void)
{
double freq;
double energy;
int converted;

oopsie:
printf("Enter frequency: ");
converted = scanf("%le", &freq);
if (converted == 1) {
energy = planck * freq;
printf("Standard energy = %20.17g\n", energy);
energy = planck2 * freq;
printf("Alternative energy = %20.17g\n", energy);
} else
goto oopsie;
return 0;
}
Jun 27 '08 #7
On Apr 14, 1:44 pm, pereges <Brol...@gmail.comwrote:
Hi, can anyone please tell me what is wrong in this program and why
does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>

#define PLANCK 6.626068e10-34
#define PLANCK 6.626068e-34
int main(void)
{
double freq;

printf("Enter frequency");
printf("Enter frequency: ");
fflush(stdout);
scanf("%e",&freq);
scanf("%le", &freq);
double energy = PLANCK * freq;

printf("\n%f", energy);
printf("%e\n", energy);
return 0;

}
--
Robert Gamble
Jun 27 '08 #8
[Once again, I've added the attribution line that Gordon Burditt has
deliberately and rudely deleted.]

go***********@burditt.org (Gordon Burditt) writes:
pereges <Br*****@gmail.comwrites:
>>Hi, can anyone please tell me what is wrong in this program and why
does it keep givng nan as the output(eg. take input as 1.2e+10) ?

#include <stdio.h>
Is this really supposed to be a constant slightly different from
6.626068e10 ?
>>#define PLANCK 6.626068e10-34

Use parentheses.
Lack of parentheses isn't the problem. Either this is a typo, or the
OP has misunderstood how scientific notation is represented in C.

The approximage value of Planck's constant is 6.626068 * 10**-34,
where "**" denotes exponentiation. In mathematical texts, this is
generally written as something like:

-34
6.626068 * 10

(That's not going to look right unless you use a fixed-width font.)

Since C needs to be written using fonts that don't support
superscripts, the C notation drops the constant "10" and uses:

6.626068E-34

What the OP wrote, "6.626068e10-34", would be interpreted by a
compiler as the floating-point constant 6.626068e10, a "-" operator,
and the integer constant 34, but I'm sure that's not what he intended.

So the correct definition (assuming the value is correct) would be:

#define PLANCK 6.626068e-34

No parentheses are necessary; a floating-point constant is a single
token, and no ambiguity is possible (barring ugly tricks with
token-pasting).

[...]
I recommend you use at least one pair of unnecessary parentheses:

#define PLANCK (((6.626068e10) - (34)))
That's just silly; I hope it was deliberately silly.

As always, I do not grant permission to quote this or any other
article I post to Usenet without attribution. Gordon, you're more
than welcome to respond; just leave the attribution lines alone.

--
Keith Thompson (The_Other_Keith) <ks***@mib.org>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Jun 27 '08 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by questions? | last post: by
1 post views Thread by apattin | last post: by
3 posts views Thread by swapna.munukoti | last post: by
6 posts views Thread by James Dow Allen | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.