Re: Exact real numbers
- To: mathgroup at smc.vnet.net
- Subject: [mg50585] Re: Exact real numbers
- From: p-valko at tamu.edu (Peter Valko)
- Date: Sat, 11 Sep 2004 06:44:36 -0400 (EDT)
- References: <chrorp$54k$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I am correcting two of my mistakes:
apprnumber=1.56012309843;
{rd,m}=RealDigits[apprnumber];
Do[
rd1=Take[rd,n];
rd2=Take[rd,-(Length[rd]-n)];
If[FromDigits[{rd2,0}]>=0.5,Part[rd1,n]+=1];
res=Sign[apprnumber] FromDigits[{rd1,m}]//N;
Print[{n,res//FullForm}]
,{n,1,Length[rd]}]
Results:
{1,2.`}
{2,1.6`}
{3,1.56`}
{4,1.56`}
{5,1.5601`}
{6,1.56012`}
{7,1.560123`}
{8,1.5601231`}
{9,1.5601231`}
{10,1.560123098`}
{11,1.5601230984`}
{12,1.56012309843`}
{13,1.56012309843`}
{14,1.56012309843`}
{15,1.56012309843`}
{16,1.56012309843`}
------------------------------------------------------------------------------
"Peter Valko" <p-valko at tamu.edu> wrote in message news:<chrorp$54k$1 at smc.vnet.net>...
> Regarding exact real numbers I am suggesting a possible solution:
>
> apprnumber = 1.56012309843;
>
> {rd, m} = RealDigits[apprnumber];
> Do[
> rd1 = Take[rd, n];
> rd2 = Take[rd, -(Length[rd] - n)];
> If[FromDigits[{rd2, m}] ? 0.5, Part[rd1, n] += +1];
> Print[{n, FromDigits[{rd1, m}] // N // FullForm}]
> , {n, 1, Length[rd]}]
>
>
> Results:
>
> {1, 2.`}
> {2, 1.6`}
> {3, 1.56`}
> {4, 1.561`}
> {5, 1.5602`}
> {6, 1.56013`}
> {7, 1.560124`}
> {8, 1.5601231`}
> {9, 1.5601231`}
> {10, 1.560123099`}
> {11, 1.5601230985`}
> {12, 1.56012309843`}
> {13, 1.56012309843`}
> {14, 1.56012309843`}
> {15, 1.56012309843`}
> {16, 1.56012309843`}
>
> Regards
> Peter
> --------------------------------------------
> Peter P. Valko, associate professor
> Harold Vance Department of Petroleum Engineering
> Texas A&M University
> office: 501K Richardson Building (corner of Spence and Ross Streets)
> mail: 3116 TAMU, College Station TX 77843-3116 (USA)
> phone: (USA)-(979)-862 2757
> fax: (USA)-(979)-862 1272
> web: http://pumpjack.tamu.edu/~valko/
> email: p-valko at tamu.edu
>
> ------------------------------------------------------------------------
> ---------------------------
> Original message:
>
> Subject: [mg50585] Exact real numbers
> From: Ross Sean Civ AFRL/DELO <sean.ross at kirtland.af.mil>
To: mathgroup at smc.vnet.net
>
> I have been having an on-going problem with real numbers in Mathematica
> that has come up again. In short, I can find no way of "rounding" a
> number in Mathematica. To me, when I say, round 1.56012309843 to three
> decimal places, I want the result to be 1.560 exactly. No hanging
> 00000000001's . The reason for this is that I need to do 3-D logic
> involving the location of points in space. I don't like getting faked
> out by numbers that ought to be the same but are slighly unequal due to
> rounding errors.
>
> Round only applies to integers. Multiplying the results of Round by
> machine precision reals results in all the hanging digits I want to get
> rid of.
>
> SetPrecision and SetAccuracy don't seem to do what I want.
> SetPrecision[1.5000287965,5] returns a result with more than 5 digits to
> the right of the decimal as does SetAccuracy.
>
> RealDigits is great in that I can actually get a list of all digits and
> manipulate them, however, its "inverse" FromDigits returns an F**ing
> fraction. I don't want a fraction. I want an exact decimal. I also
> prefer function pairs that are exact inverses to one another.
>
> One strange assymetry of Mathematica is that I can type in the exact
> decimal number 1.50027` and Mathematica knows that is an exact decimal.
> FullForm reveals that the only decimal digits in that number are what I
> specified. However, I know of no way to create an exact decimal from a
> machine precision one.
>
> Does anyone know of a way to do true decimal rounding in Mathematica?
>
> Please respond to sean.ross at kirtland.af.mil. I no longer subscribe
> to mathgroup.
>
> Dr. Sean Ross
> AFRL/DELO
> 3550 Aberdeen Ave SE, Building 761
> Kirtland AFB, NM 87117
>
> phone: 505-846-9148