This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: problem with precision when reading from file


On 9/16/2010 5:38 AM, Anna Sidera wrote:

----- Original Message ----- From: Tim Prince<n8tm@aol.com> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]