Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

LaTeX3 l3fp offers a way to check if a variable has a an infinite value. The following code defines a number and then sets its value to π/2. It then calculates tan(π/2) to get a large result.

\ExplSyntaxOn
  \fp_new:N \mynumber
  \fp_new:N \pi_half
  \fp_div:Nn \pi_half{\c_pi_fp/2}
  \fp_tan:Nn  \mynumber{\pi_half}
  \texttt{\mynumber}\\

  \fp_if_infinity:NTF \c_infinity_fp {NaN}{Do~something~with~\number}\\

\ExplSyntaxOff

In many languages the indeterminate form is normally indicated by NaN what would be a good strategy to define a macro to test for this in expl3 for all cases of NaN, such as division by zero etc?

share|improve this question
    
As I've said in my updated answer, I think this actually needs some revision. –  Joseph Wright Nov 25 '10 at 20:37
add comment

1 Answer

up vote 11 down vote accepted

The FPU for LaTeX3 has undergone some major changes. Up to the version included in the DVD of TeX Live 2012 (mid-June 2012) the 'old' FPU worked one way. The improved FPU, available from the development repository and scheduled for release to CTAN some time in late June 2012, is expandable and features a number of improvements.

Updated (expandable) FPU answer

The new FPU recognises the 'not a number' concept

\fp_set:Nn \l_tmpa_fp { nan }

NaN is not equal to any value, not even another NaN: this is the standard approach in many languages. Thus

\fp_compare:nNnTF { nan } = { nan } { \TRUE } { \FALSE }

is FALSE.

Original (non-expandable) FPU answer

There are currently special markers in expl3 for infinite and undefined results, \c_infinite_fp and \c_undefined_fp. Division by exactly zero is undefined:

\fp_div:Nn \l_my_fp { 0 }
\fp_if_undefined:NTF \l_my_fp { TRUE } { FALSE }

gives TRUE.

Thinking about this again, I notice that the tangent of π/2 should not actually be infinite as it does not have a limit (thinking about the various tests for limits of series). I suspect this should be altered: expect the next expl3 update to improve in this area.

share|improve this answer
    
@Joseph Thanks! I was just thinking of something such as fp_if_NaN, but as you say you covered the bases. Will take a look at the LaTeX-L list. –  Yiannis Lazarides Nov 25 '10 at 20:40
    
@Yiannis: I've just checked in a change so that both division by zero and tan(π/2) will give \c_undefined_fp as result, which is tested for using \fp_if_undefined:N(TF). This will go to CTAN in a moment. –  Joseph Wright Nov 25 '10 at 20:47
    
@Joseph Good correction as the domain of the inverse tangent function is all real numbers, but neither -infinity nor infinity is included in that set. –  Yiannis Lazarides Nov 25 '10 at 20:53
1  
@Joseph: I'd find it nice to distinguish "undefined" and "infinity" resp. "-infinity". But for the latter there are probably not many instances. For \tan in radians you don't need "undefined" at all since \tan is defined on all rational numbers, but the Cotangent is undefined at 0. –  Hendrik Vogt Nov 26 '10 at 11:14
2  
@FedericoPoloni That is the aim: Bruno Le FLoch has done a lot of work on this. At the point of writing, there are I believe some issues with subnormal numbers/underflows, but we should not be in a bad position. However, the standard leaves open some variability, which poses a few questions for TeX developers (for example in transcendental functions). –  Joseph Wright Jun 2 '12 at 14:56
show 13 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.