Re: Help w/ Floats needed!
On 18 mai, 06:43, "Somebody" <someb...@cox.net> wrote:
I have a point "int x", and a width "int cx". In order to
support scaling, I store this as "double ratio = x / cx" which
invariably led to round off errors when I tried to
re-calculate the new position from the ratio as in:
x = ratio * cx;
I tried to solve this by multiplying the numerator by 10,000
to gain more precision... recent testing showed that I had not
solved the problem in all cases. Thinking about it, no matter
how many times I multiply the numerator of a fraction, I'll
never be able to recover 100 from 1/3 (0.333333....) for
example.
No.
I came up with this idea: instead of storing "double ratio = x
/ cx", I will store int numerator=x, int denominator = cx;
That way, in my case off 1/3, I'll be able to fully recover the original
value. Ie...:
Not unless your doubles use a base 3, or a power of 3.
original pos = 33
original width = 100
num = 33;
denom = 100;
new width = num * 100 / denom = 33;
Does this sound like a reasonable solution (with ABSOLUTELY
ZERO LOSS OF PRECISION)?
You haven't really specified the problem. Zero loss of
precision isn't possible with a finite representation, so you
can forget about that.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34