problem with double data in exponential form

P

pereges

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;

}
 
U

user923005

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 *:
 
U

user923005

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.
 
P

pereges

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.
 
U

user923005

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

Robert Gamble

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);
 
K

Keith Thompson

[Once again, I've added the attribution line that Gordon Burditt has
deliberately and rudely deleted.]

Is this really supposed to be a constant slightly different from
6.626068e10 ?


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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top