Home > Software design >  How to create one only decimal number in C?
How to create one only decimal number in C?

Time:02-23

I've a problem: I would need to concatenate 3 double numbers into one only double number. For example, I've:

a = 40.000000;
b = 56.000000;
c = 10.236330;

I need the following number: 40.5610236330. The integer part is defined by the first two cyphers of a, the first two decimal cyphers are the integer part of b and the other decimal cyphers are all the cyphers of c. I've tried with:

k = a (b/100) (c/1000);

But due to approximation error, the result is 40.570236. Could you help me? Thank you so much!

CodePudding user response:

Floating point calculation always loose some precision.

But 40.570236 instead of 40.5610236330 is too much off.

The big error you see is because of a simple bug in your code.

You need k = a (b/100) (c/10000); (i.e. c is to be divided by 10000)

Maybe it would be more clear if you did k = a (b/100) (c/100/100);

But never expect floating point calculation to 100% precise. It's not even certain that the number 40.5610236330 can be represented in float/double

And further, the input values them self may be imprecise:

double c = 10.236330;
printf("%.20f\n", c);

Output:

10.23633000000000059515

CodePudding user response:

There is enough precision in a double variable to store a number of 12 significant digits (though your question does not really state how many digits c has).

double k= a   b * 0.01   c * 0.0001;

will work. But when you display it, be sure to use a format with 10 digits after the decimal point (%.10f) so that rounding restores the correct decimals.

  • Related