Re: DigitDifferences?

• To: mathgroup at smc.vnet.net
• Subject: [mg60758] Re: DigitDifferences?
• From: Maxim <ab_def at prontomail.com>
• Date: Tue, 27 Sep 2005 03:45:29 -0400 (EDT)
• References: <dh2tfe\$d69\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```On Sat, 24 Sep 2005 06:58:54 +0000 (UTC), Paul Abbott
<paul at physics.uwa.edu.au> wrote:

> I would like some suggestions on good implementations of the following
> idea: suppose that you have two numbers whose floating point
> representation has many common digits, say
>
>   2`50 Sum[(-1)^(k - 1)/(2 k - 1), {k, 1, 50000}]
>
>   1.5707863267948976192313211916397520520985833146875579625874449850433
>
> and
>
>   N[Pi/2, 50]
>
>   1.5707963267948966192313216916397514420985846996875529104874722962622
>
> Although these two numbers disagree in the 5th decimal place, they still
> have a great many common digits from that point onwards.
>
> (By the way, if you are using OS X you can use the "Evaluate to Text"
> MathService under the Services menu to do inline Mathematica evaluations
> in your favourite newsreader, avoiding much of the cutting and pasting
> to and from Mathematica. I used that here for the numerical evaluations.)
>
> I would like to display the differences between these numbers a la
> Borwein Borwein and Dilcher (1989) in "Pi, Euler numbers and asymptotic
> expansions", Amer. Math. Monthly 96 (1989), 681-687. To get an idea,
> paste either cell below into a Notebook. These attempts were done by
> hand -- so automated code for their production would be nice -- and they
> have one unfortunate problem: the spacing between numbers is not
> uniform. Suggestions for a DigitDifferences function most welcome.
>
> Cheers,
> Paul
>
> Here my two attempts to display the sort of formatting required -- there
> may be other better solutions:
>
>   Cell[BoxData[
>     FormBox[
>       RowBox[{"1.5707",
>         UnderscriptBox["8",
>           UnderscriptBox["_", "1"]], "632679489",
>         UnderscriptBox[
>           UnderscriptBox["7", "_"],
>           RowBox[{"-", "1"}]], "619231321",
>         UnderscriptBox["1",
>           UnderscriptBox["_", "5"]], "9163975",
>         UnderscriptBox[
>           UnderscriptBox["205", "_"],
>           RowBox[{"-", "61"}]], "209858",
>         UnderscriptBox["3314",
>           UnderscriptBox["_", "1385"]], "6876"}],
>
>
>
>    Cell[BoxData[
>     FormBox[
>       RowBox[{"1.5707", " ",
>         UnderscriptBox["8",
>           UnderscriptBox["_", "1"]], " ", "632679489", " ",
>         OverscriptBox[
>           OverscriptBox["7", "_"], "1"], " ", "619231321", " ",
>         UnderscriptBox["1",
>           UnderscriptBox["_", "5"]], " ", "9163975", " ",
>         OverscriptBox[
>           OverscriptBox["205", "_"], "61"], " ", "209858", " ",
>         UnderscriptBox["3314",
>           UnderscriptBox["_", "1385"]], " ", "6876"}],
>

This is close to what you're looking for (try it with different fonts):

f[n1_, n2_, digits_: 0] := Module[
{form, Lrd, shft, Ln, Lchunk, Mdsym, Lbox},
form = GridBox[#, RowLines -> #2,
ColumnSpacings -> 0., RowSpacings -> .1,
GridBaseline -> {Baseline, {2, 1}}, RowAlignments -> Center]&;
Lrd = If[digits == 0,
RealDigits[{n1, n2}],
RealDigits[{n1, n2}, 10, digits]
];
(shft = Lrd[[1, 2]] - Lrd[[2, 2]];
Which[shft > 0,
Lrd[[2, 1]] = PadLeft[Lrd[[2, 1]], Length@ Lrd[[2, 1]] + shft],
shft < 0,
Lrd[[1, 1]] = PadLeft[Lrd[[1, 1]], Length@ Lrd[[1, 1]] - shft]
];
{2, Max[Length /@ Lrd[[All, 1]]]}];
Lchunk = Split[Transpose@ Lrd[[All, 1]], SameQ @@ Equal @@@ {##}&];
Lbox =
(Ln = FromDigits /@ Transpose@ #;
Ln = {Ln[[1]], Subtract @@ Ln, -Subtract @@ Ln};
Mdsym = PadLeft[Characters@ ToString@ #& /@ Ln, {4, Length@ #},
{{" "}, {"0"}, {" "}, {" "}}];
{form @@ Switch[Sign@ Ln[[2]],
0, {Mdsym[[{1, 2, 1}]], False},
-1, {Mdsym[[{1, 2, 4}]], {False, True}},
_, {Mdsym[[{3, 2, 1}]], {True, False}}
],
"\[InvisibleSpace]"}
)& /@ Lchunk;
Lbox = Most@ Flatten[Lbox, 1];
Lbox = {".", Sequence @@ Lbox,
"\[Times]", SuperscriptBox["10", ToBoxes@ Max@ Lrd[[All, 2]]]};
StyleBox[RowBox@ Lbox,
AutoSpacing -> False, ShowStringCharacters -> False] //
DisplayForm
) /; FreeQ[Lrd, RealDigits | Indeterminate] &&
!MemberQ[Lrd[[All, 1]], _List, {2}]
]

f @@
{1.5707863267948976192313211916397520520985833146875579625874449850433,
1.5707963267948966192313216916397514420985846996875529104874722962622}

The third optional argument specifies the length of the expansion we want
to get from RealDigits.

Maxim Rytin
m.r at inbox.ru

```

• Prev by Date: Re: DigitDifferences?
• Next by Date: Re: WORD document
• Previous by thread: Re: DigitDifferences?
• Next by thread: Recursion problem in SymbolicSum