Subject: Re: sort manpage is obscure on this point
To: None <vax@linkdead.paranoia.com>
From: Jim Meyering <meyering@asic.sc.ti.com>
List: current-users
Date: 06/26/1996 17:26:18
From: VaX#n8 <vax@linkdead.paranoia.com>
Date: Wed, 26 Jun 1996 09:52:33 -0500
| >| What the sort manpage does not say is that it's numeric comparison does
| >| not use atoi() or any of the normal string-to-machine conversions but
| >| rather does it's own (admittedly fast) algorithm.
| >| However, it does not handle leading "+"s very well, where the other ones do.
| >
| >On what system did the vendor-supplied sort -n handle a leading `+'
| >differently?
|
| Sorry, I meant "the other algorithms", like ato*(3) and friends,
| convert leading "+" properly.
|
| Also, the algorithm in the GNU sort does not handle a leading "-." (as in
| "-.2")... the decimal -must- be led by a zero.
You still haven't said what version of GNU sort you're using.
Use sort --version to see. In the latest (1.18), sort -n properly
handles numbers like `-.2':
% printf "-.2\n0\n-1\n" |sort -n
-1
-.2
0
| Interestingly, no vendor manpage that I've seen defines the format for such
| numbers, or in any way indicates they don't use ato*(3) and friends.
| Thankfully, there's GNU :)
The man page for GNU sort says this
-n Compare according to arithmetic value an initial
numeric string consisting of optional white space, an
optional - sign, and zero or more digits, optionally
followed by a decimal point and zero or more digits.
which doesn't *explicitly* say that it uses a nonstandard
method to compare floating point numbers. But it does imply that,
because (by omission) neither a leading `+' nor exponential
notation is recognized.
I'll change the texinfo documentation to make that explicit.
In fact, sort -n doesn't convert strings to `double' at all.
It actually aligns the decimal points in the two strings and
compares the strings a character at a time.