http://d.puremagic.com/issues/show_bug.cgi?id=5971
Don <clugd...@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugd...@yahoo.com.au --- Comment #2 from Don <clugd...@yahoo.com.au> 2012-06-22 00:16:57 PDT --- Re idea 5: To find number of digits of x, use p = x.ulonglength(); m = peekUlong(p-1); then number of digits is between lowerbound = log10(m) + p*log10(ulong.sizeof*8*2). upperbound = log10(m+1) + p*log10(ulong.sizeof*8*2) Make sure that there are enough digits in m that (upperbound-lowerbound) < 1. Optionally use m = m*(ulong+1) + peekUlong(p-2), p-- to get a better value for m, which will reduce the probability that an exact calculation must be performed. If the range includes an exact integer (eg, the range is 1547.8 .. 1548.2) then it's necessary to do a full calculation. if (trunc(lowerbound) == trunc(upperbound)) return lowerbound else { y = 10^^(lowerbound+1); if (x < y) return lowerbound; return lowerbound+1; } The problem is, that if the number is close to 10^^d, there is no way to avoid the full calculation. And unfortunately, although the hard case it is numerically rare, it is a very common case in practice. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------