LATEX-L Archives

Mailing list for the LaTeX3 project


Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Sender: Mailing list for the LaTeX3 project <[log in to unmask]>
Date: Thu, 13 Apr 2017 22:28:42 -0400
Reply-To: Mailing list for the LaTeX3 project <[log in to unmask]>
Message-ID: <[log in to unmask]>
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
In-Reply-To: <[log in to unmask]>
Content-Type: text/plain; charset=utf-8
From: Bruno Le Floch <[log in to unmask]>
Parts/Attachments: text/plain (41 lines)
On 04/02/2017 12:09 AM, Andrew Parsloe wrote:
> Is there a simple way to distinguish -0 from 0 in l3fp?
> I had been aligning left in a table a column of sines, +0 or -0 followed
> by decimal point & digits. By adding an \hphantom{-} before the positive
> numbers, they aligned nicely on the decimal point in the column, but
> then along came -0. The simple conditional, "if !(number < 0) add
> phantom", added the phantom and the column aligned like
>  0
>  0.5878
>  -0
> -0.5878
> etc.
> In the absence of formatted printing of numbers, -0 is a problem. Even a
> built-in test for -0 would ease matters, since in any kind of formatted
> printing of numbers 0 and -0 will generally require different handling.
> As it is, I've had to test each fp for whether it is zero; if it is I
> convert to a tl variable and test whether that is -0. This is clumsy.
> Hence my opening question.
> Andrew

Sorry for the delay.

One option is to normalize -0 to +0 by adding +0.  Namely, number+0 is
equal to number for any non-zero number and is +0 for both +0 and -0.

Another option is to compute 1/number after disabling the
"division-by-zero" trap, and test whether that's +inf or -inf, but
that's more complicated than the tl test you're doing.

A better option is that I should add a "copysign" function, that is in
the IEEE standard: copysign(1,x) gives +1 or -1 depending on the sign
bit of x (so in particular this distinguishes +0 and -0).

For your specific use case I would use \fp_to_tl:n then test whether the
first character (\str_head:n) is "-" or not.  This also covers nan properly.