question about cx_Oracle .thanks
sholden at holdenweb.com
Sat Jun 26 07:02:36 CEST 2004
Peter Hansen wrote:
> Since it has a limited number of binary digits available, it can't
> store precisely 42055.66, so 42055.6600000whatever is the next
> closest. To demonstrate, the nearest neighbours that can be
> represented accurately are these (binary value one higher or lower):
> >>> struct.unpack('>d', binascii.unhexlify('40e488f51eb851ed'))
> >>> struct.unpack('>d', binascii.unhexlify('40e488f51eb851eb'))
> So clearly the binary can capture only increments of about
> 0.000000000007 or 0.000000000008 at a time, and all of these
> values must be treated as approximations... unless one was
> trying to store 42055.660000000003 in the first place!
Just to make things even more complicated, of course, we must also
remember that the delta between two adjacent floating-point numbers
isn't constant, but will vary according to the magnitude of the numbers.
>> - this is an accurate decimal representation of the binary value:
>> >>> print repr(42055.66)
> All very true. ;-)
And it just goes to show that floating-point is quite confusing enough
to make many a beginner run away in fright!
More information about the Python-list