problem with double data in exponential form

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • pereges

    #1

    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",&fre q);
    double energy = PLANCK * freq;

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

    }
  • user923005

    #2
    Re: problem with double data in exponential form

    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",&fre q);
    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 -

    Comment

    • user923005

      #3
      Re: problem with double data in exponential form

      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",&fre q);
                      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.

      Comment

      • Gordon Burditt

        #4
        Re: 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>
        >
        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)))

        Comment

        • pereges

          #5
          Re: problem with double data in exponential form

          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",&fr eq);
          double energy = PLANCK * freq;
          printf("\n%e", energy);


          getting some negative garbage value now.

          Comment

          • user923005

            #6
            Re: problem with double data in exponential form

            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",&fr eq);
            double energy = PLANCK * freq;
            printf("\n%e", energy);
            >
            getting some negative garbage value now.
            From:


            static const double planck = 6.62606896e-34;

            Comment

            • user923005

              #7
              Re: problem with double data in exponential form

              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",&fr eq);
              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("Standar d energy = %20.17g\n", energy);
              energy = planck2 * freq;
              printf("Alterna tive energy = %20.17g\n", energy);
              } else
              goto oopsie;
              return 0;
              }


              Comment

              • Robert Gamble

                #8
                Re: problem with double data in exponential form

                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",&fre q);
                scanf("%le", &freq);
                double energy = PLANCK * freq;
                >
                printf("\n%f", energy);
                printf("%e\n", energy);
                return 0;
                >
                }
                --
                Robert Gamble

                Comment

                • Keith Thompson

                  #9
                  Re: problem with double data in exponential form

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

                  gordonb.czo5z@b urditt.org (Gordon Burditt) writes:
                  pereges <Broli00@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.626068e1 0-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_Keit h) <kst-u@mib.org>
                  Nokia
                  "We must do something. This is something. Therefore, we must do this."
                  -- Antony Jay and Jonathan Lynn, "Yes Minister"

                  Comment

                  Working...