Re: Sort[] accuracy problem
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1145] Re: Sort[] accuracy problem
- From: roth at sunny.mpimf-heidelberg.mpg.de (Arnd Roth)
- Date: Wed, 17 May 1995 04:59:24 -0400
- Organization: Max-Planck-Institut fuer Medizinische Forschung
In article <3p657h$kb1 at news0.cybernetics.net>
"Wm. Martin McClain" <wmm at chem.wayne.edu> writes:
> Here is the kind of thing that is giving me trouble:
>
> In[299]:= Sort[{{5.00, 1}, {4.00, 3}, {1.00, 2}, {4.01, 1}}]
> Out[299] = {{1.00, 2}, {4.00, 3}, {4.01, 1}, {5.00, 1}}
>
> But I would like it to treat 4.00 and 4.01 as the same for the
> purposes of sorting, so that it returns the approximately
> alphebetized list
>
> {{1.00, 2}, {4.01, 1}, {4.00, 3}, {5.00, 1}}
>
> where the difference between 1 and 3 is treated as more
> important than the difference between 4.00 and 4.01.I tried
>
> Sort[list,(Round[#2*10]<Round[#1*10])&],
>
> but it seems to think that #n refers to the whole point {x,y},
> rather than just to x (or on the second round, just to y), so the
> comparison becomes neither True nor False and no sorting is done.
The first part of {x, y} is x, so let's just compare the first
parts:
In[1]:= list = {{5.00, 1}, {4.00, 3}, {1.00, 2}, {4.01, 1}}
Out[1]= {{5., 1}, {4., 3}, {1., 2}, {4.01, 1}}
In[2]:= Sort[list, Round[First[#1]*10] < Round[First[#2]*10] &]
Out[8]= {{1., 2}, {4.01, 1}, {4., 3}, {5., 1}}
Arnd Roth
Abteilung Zellphysiologie
Max-Planck-Institut fuer Medizinische Forschung
Postfach 10 38 20, D-69028 Heidelberg, Germany
http://sunny.mpimf-heidelberg.mpg.de/people/roth/ArndRoth.html