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.