Re: problem with precision when reading from file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- Original Message -----
From: Tim Prince <n8tm@xxxxxxx>
Date: Thursday, September 16, 2010 4:18 pm
Subject: Re: problem with precision when reading from file

>  On 9/16/2010 5:38 AM, Anna Sidera wrote:
> >
> > ----- Original Message -----
> > From: Tim Prince<n8tm@xxxxxxx>
> > Date: Wednesday, September 15, 2010 6:07 pm
> > Subject: Re: problem with precision when reading from file
> >
> >>   On 9/15/2010 7:37 AM, Anna Sidera wrote:
> >>> Hello,
> >>>
> >>> I wrote the following program:
> >>>
> >>>
> >>>
> >>> #include<stdio.h>
> >>> #include<math.h>
> >>> #include<stdlib.h>
> >>> #include<time.h>
> >>> #include<string.h>
> >>>
> >>> int main()
> >>> {
> >>>
> >>> FILE *fp;
> >>> fp = fopen("test.c", "r");
> >>> if (fp == NULL){
> >>>       printf("Error opening input file\n");
> >>>       exit(1);
> >>> }
> >>>
> >>> float var1, var2, var3;
> >>>
> >>> fscanf(fp,"%f",&var1);
> >>> fscanf(fp,"%f",&var2);
> >>> fscanf(fp,"%f",&var3);
> >>>
> >>> if (var1!=0.01) printf("var1 = %g\n",var1);
> >>> if (var2!=5) printf("var2 = %g\n",var2);
> >>> if (var3!=0.6) printf("var3 = %g\n",var3);
> >>>
> >>>
> >>>
> >>> Where test.c contains the following:
> >>>
> >>> 0.01
> >>> 5
> >>> 0.6
> >>>
> >>>
> >>>
> >>> When I run the program I get the following output:
> >>>
> >>> var1 = 0.01
> >>> var3 = 0.6
> >>>
> >>>
> >>>
> >>> I expected to get no output. Can you explain what is the problem?
> >>>
> >>> Thanks,
> >>> Anna
> >> Did you mean to try
> >>
> >> if (var1!=0.01f) printf("var1 = %g\n",var1);
> >> if (var3!=0.6f) printf("var3 = %g\n",var3);
> >>
> >> or possibly to convert var1 and var3 back to short char strings
> >> and compare those?
> >>
> >> 0.01 and 0.6 are constants of type double and will have typically
> >> 29 more bits precision in their
> >>   conversion from decimal to binary representation than your
> >> conversions to type float.
> >>
> >>
> >>
> >>
> >> -- 
> >> Tim Prince
> >>
> >>
> >
> > I wrote a program that uses some input parameters. The program 
> should read the input parameters from a file. There are also some 
> input parameters that are arguments to main. Is there a way to 
> read the input parameters so that for example var1*var2 gives a 
> value equal to 0.05? What is the best way to read the input 
> parameters?>
> > If var1 and var3 are float and 0.01 and 0.6 are long then why 
> you mention short char?
> >
> > Anna
> I meant use sprintf() or such to make a string of char to see if 
> it 
> comes out to the desired value.  Such a string conversion might be 
> a 
> possibility for your product test.  It should be evident that you 
> can't 
> make an inexact float value come out identical to a double value 
> resulting from a higher precision calculation, but maybe you 
> haven't 
> explained what you want to do.  My initial impression was that you 
> might 
> have forgotten the distinction between float and double constants.
> 
> -- 
> Tim Prince
> 
>
Thank you for your help.

Tim, what I was trying to do is the following. I wrote a simulation program that reads some input parameters and gives some output parameters. I ran it for a set of input parameters and got the output. Then I changed some of the values of the input paramters and ran it again. I thought that I could guess the output for the second set of input parameters given the output for the first set of input parameters, but I was wrong. Then I found out about this precision problem.

Anna


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux