Re: creating exact numbers, strange behavior
- To: mathgroup at smc.vnet.net
- Subject: [mg52999] Re: [mg52960] creating exact numbers, strange behavior
- From: DrBob <drbob at bigfoot.com>
- Date: Sun, 19 Dec 2004 06:14:45 -0500 (EST)
- References: <200412180859.DAA02167@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
Here are Mathematica's binary representations of the numbers in that last Quotient:
RealDigits[7.*10^100,2]
RealDigits[10^100,2]
{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,
0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1},336}
{{1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,
1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,
0,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,
1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,
1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,
1,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,
1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0},333}
Quick, now... what's the quotient and remainder? (Not for the original numbers -- for THOSE numbers.)
For the quotient to be 7, you need 7*10^100 <= 7.*10^100. But check out the binary representations:
real=RealDigits[7.*10^100,2]
integer=RealDigits[7*10^100,2]
{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,
0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1},336}
{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,
0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,
0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,
0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,
1,1,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,
0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,
1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0},336}
They agree to the 53 bits precision present in "real":
Length@First@real
First@Take[integer,1,Length@First@real]\[Equal]First@real
53
True
But the "integer" version has other non-zero bits, so the integer version is bigger.
So the quotient isn't 7. It's 6.
Q: What's the solution?
A: If you intend a number to be exactly 7*10^100, write it that way (with no decimal).
Quotient[7*10^100,10^100]
7
Bobby
On Sat, 18 Dec 2004 03:59:33 -0500 (EST), Matthias Gottschalk <gottschalk at gfz-potsdam.de> wrote:
> Hi,
>
> I try to convert machine number into an exact number. I do this the
> following way:
>
> In[] = Quotient[7.*10^30,10^30]
>
> Out[] = 7
>
> that is fine.
>
>
> In[] = Quotient[7.*10^99, 10^99]
>
> Out[] = 7
>
> still fine.
>
>
> In[] = Quotient[7.*10^100,10^100]
>
> Out[] = 6
>
> ????????, I think that is bad.
> Or am I doing something wrong?
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net
- References:
- creating exact numbers, strange behavior
- From: Matthias Gottschalk <gottschalk@gfz-potsdam.de>
- creating exact numbers, strange behavior