LATEX-L Archives

Mailing list for the LaTeX3 project

LATEX-L@LISTSERV.UNI-HEIDELBERG.DE

Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

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

Print Reply
Subject:
From:
Heiko Oberdiek <[log in to unmask]>
Reply To:
Mailing list for the LaTeX3 project <[log in to unmask]>
Date:
Thu, 8 Nov 2007 21:01:00 +0100
Content-Type:
text/plain
Parts/Attachments:
text/plain (114 lines)
On Thu, Nov 08, 2007 at 11:18:55AM +0100, Jonathan Sauer wrote:

> > Also both solutions have the disadvantage, that intermediate 
> > results may cause an arithmetic overflow. As result the 
> > accepted number range is limited unnecessarily.
> >   Therefore I have choosen a more complicate route in package 
> > `intcalc' by a case switch for zero, positive and negative numbers.
> 
> It looks like that is the only way to be safe.

\def\divtrunc#1#2{%
  \numexpr
    \ifnum\numexpr#1=0 %
      0%
    \else
      (#1%
      \ifnum\numexpr#1<0 %
        \ifnum\numexpr#2<0 %
          -(#2+%
        \else   
          +(#2-%
        \fi
      \else
        \ifnum\numexpr#2<0 %
          +(#2+%
        \else   
          -(#2-%
        \fi
      \fi  
      1)/2)%
    \fi
    /(#2)%
  \relax  
}
 
\def\test#1#2#3{%
  \immediate\write16{%
    (#1) / (#2) = \number\divtrunc{#1}{#2} %
    \ifnum\divtrunc{#1}{#2}=#3 [ok]\else <> #3 [error]\fi
  }%
}   
\test{-3}{1}{-3}
\test{-2}{1}{-2}
\test{-1}{1}{-1}
\test{0}{1}{0}  
\test{1}{1}{1}  
\test{2}{1}{2}  
\test{3}{1}{3}  
\test{-3}{-1}{3}
\test{-2}{-1}{2}
\test{-1}{-1}{1}
\test{0}{-1}{0} 
\test{1}{-1}{-1}
\test{2}{-1}{-2}
\test{3}{-1}{-3}
\test{-4}{2}{-2}
\test{-3}{2}{-1}
\test{-2}{2}{-1}
\test{-1}{2}{0} 
\test{0}{2}{0}  
\test{1}{2}{0}  
\test{2}{2}{1}  
\test{3}{2}{1}  
\test{4}{2}{2}  
\test{-4}{-2}{2}
\test{-3}{-2}{1}
\test{-2}{-2}{1}
\test{-1}{-2}{0}
\test{0}{-2}{0} 
\test{1}{-2}{0} 
\test{2}{-2}{-1}
\test{3}{-2}{-1}
\test{4}{-2}{-2}
\test{-6}{3}{-2}
\test{-5}{3}{-1}
\test{-4}{3}{-1}
\test{-3}{3}{-1}
\test{-2}{3}{0} 
\test{-1}{3}{0} 
\test{0}{3}{0}  
\test{1}{3}{0}  
\test{2}{3}{0}  
\test{3}{3}{1}  
\test{4}{3}{1}  
\test{5}{3}{1}  
\test{6}{3}{2}  
\test{-6}{-3}{2}
\test{-5}{-3}{1}
\test{-4}{-3}{1}
\test{-3}{-3}{1}
\test{-2}{-3}{0}
\test{-1}{-3}{0}
\test{0}{-3}{0} 
\test{1}{-3}{0} 
\test{2}{-3}{0} 
\test{3}{-3}{-1}
\test{4}{-3}{-1}
\test{5}{-3}{-1}
\test{6}{-3}{-2}
\test{2147483647}{2}{1073741823}
\test{-2147483647}{2}{-1073741823}
\test{2147483647}{-2}{-1073741823}
\test{-2147483647}{-2}{1073741823}
\test{2147483647}{2147483647}{1}
\test{-2147483647}{2147483647}{-1}
\test{2147483647}{-2147483647}{-1}
\test{-2147483647}{-2147483647}{1}
% tests for expressions ...
\csname @@end\endcsname
\end

Yours sincerely
  Heiko <[log in to unmask]>

ATOM RSS1 RSS2