Sort[] accuracy problem
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1130] Sort[] accuracy problem
- From: "Wm. Martin McClain" <wmm at chem.wayne.edu>
- Date: Wed, 17 May 1995 02:29:13 -0400
- Organization: Wayne State University, College of Science
Dear mathgroupers:
I have a list of 3D points that I want to "alphabetize", but only up
to a certain accuracy. I thought I could do this with
Sort[points,logicFn[#1,#2]],
where logicFn[#1,#2] replaces the default comparison function
(#1<#2)&.
However, it seems that alphabetization, which happens automatically
with the default comparison, is disabled when you supply your
own comparison. My question, in brief, is ?Can I restore it?
Here is what I mean by "alphabetize":
In[298]:= Sort[{{5, 1}, {4, 3}, {1, 2}, {4, 1}}]
Out[298] = {{1, 2}, {4, 1}, {4, 3}, {5, 1}}
The points {x,y} are sorted by ascending x, but when x does not
decide, they are sorted by ascending y.
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.
Any ideas? (With this group there are always ideas...)
Thanks in advance- Martin McClain