On Wed, Jul 18, 2007 at 10:58:58AM -0400, Rutherdale, Will wrote:
> Tim, I have a couple of feedback comments on your text.
> 
> A)  I would not characterise 32-bit signed integers as giving 10 digits
> of precision as you did.  They give log10( 2^31 ) ~= 9.3319 digits of
> precision.  Since you can't count on the full 10th digit, I would
> truncate and tell people you get 9 digits of precision.  Similarly a
> signed 64-bit integer gives 18.9649 or really just 18 digits of
> precision to be safe, but 128-bit signed integers give you a full 38
> digits.
> 
> B)  long double is not usually 96 bits, but rather 80 bits.  Most
> machines that people use follow the IEEE 754 standard, which says >=79
> bits but is normally implemented as 80 bits.

Okay.

> Good explanation generally.

Thanks for the feedback Will. I'll make some changes.

> For the general list, I'm still interested in the issue of alternative
> representations for financial work.  Has anyone had much experience with
> the ( NUMERIC , Math::BigFloat ) combination?  Is that used generally by
> people in the field?

Might be worth meditating on that question over at http://perlmonks.org

Tim.

> 
> -Will
> 
> 
> > -----Original Message-----
> > From: Tim Bunce [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday 17 July 2007 19:02
> > To: Christopher Sarnowski
> > Cc: [EMAIL PROTECTED]; dbi-users@perl.org
> > Subject: Re: float bug? perl 5.8, DBI and oracle 10.2.0
> >
> >  . . .
> >
> > Funnily enough I wrote a section on this topic back in May
> > 2006 for the
> > 2nd edition of DBI book (which is currently shelved, by the way).
> > I've appended the relevant chunk of the rough draft. Comments welcome.
> >
> > Tim.
> >
> > . . .
> >
> > =head3 Perl Integer Values
> >
> > Integers are typically stored as 32 or 64 bit (4 or 8 byte) values
> > depending on how perl was configured. You can check the size
> > of integers
> > in your perl by running C<perl -V> and looking for C<ivsize=>
> > in the output.
> > The range of a 32 bit integer is -2,147,483,648 to 2,147,483,647
> > (10 digits of precision).  The range of a 64 bit integer is
> > -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (19 digits
> > of precision).
> > . . .
> > =head3 Perl Floating Point Values
> >
> > Floating point values are typically stored in 64 bits or sometimes 96
> > bits (that's 8, or 12 bytes) depending on how your perl was
> > configured.
> > You can check the size used in your perl by running C<perl -V> and
> > looking for C<nvsize=> in the output.  The 64 bit floats are known as
> > I<doubles> and have approximately 15 digits of precision
> > between 1e-307
> > to 1e+308, and the 96 bit floats are known as I<long doubles> and have
> > approximately 18 digits of precision between 1e-4931 to 1e+4932. Some
> > systems support 128 bit I<quad doubles> with even greater
> > precision and
> > scale.
> >
> > It's becoming more common for perl to be configured with 64 bit
> > integers but still using 64 bit floating point values. But a 64 bit
> > integer has 19 digits of precision whereas a 64 bit floating point
> > value only has approximately 18.  This is important to know because it
> > means that a large integer may loose precision if it's involved in a
> > calculation that causes it to be converted to a floating point value
> > (which is basically anything more involved that addition or
> > subtraction
> > of another integer).
> > . . .
> >
> > Some databases support very large integers. Oracle, for
> > example, supports
> > integers with 38 digits of precision. That's far beyond the
> > 10 digits of a
> > simple 32bit integer and even the 19 digits of a 64bit
> > integer.  Because of
> > this the DBD::Oracle driver returns integers, and indeed all
> > other numberic
> > types, as strings.
> >
> > The DBI will probably gain a way to hook into the fetching of a
> > value from the database so that the use of Math::BigInt, for example,
> > can be made transparent and not clutter up the code. But that hasn't
> > happened yet. XXX
> >
> > Many databases support multiple sizes of integer types from 1 to 8
> > bytes in size with INTEGER (4 bytes) and SMALLINT (2 bytes) being
> > the most common.N<Oracle is a little unusual in that it only has
> > one underlying numeric type which is variable width and all other
> > numeric types are aliases for it.>
> >
> 
> 
> 
>      - - - - - Appended by Scientific Atlanta, a Cisco company - - - - - 
> This e-mail and any attachments may contain information which is confidential,
> proprietary, privileged or otherwise protected by law. The information is 
> solely
> intended for the named addressee (or a person responsible for delivering it to
> the addressee). If you are not the intended recipient of this message, you are
> not authorized to read, print, retain, copy or disseminate this message or any
> part of it. If you have received this e-mail in error, please notify the 
> sender
> immediately by return e-mail and delete it from your computer.

Reply via email to