Hello Jürgen,

        SVN 969 on my platform (Fedora 25, Intel(R) Core(TM) i7-6700
CPU) 

      5J3 | 14J5 1J4 ¯4J1

gives

1J4 ¯4J1 ¯4J1


not


¯1J4 ¯4J1 ¯4J1

Regards,


Fred

On Fri, 2017-06-23 at 17:38 +0200, Juergen Sauermann wrote:
>     Hi,
> 
>       
> 
>       I have changed A∣B to literally follow the paper pointed
>       out by Jay.
> 
>       The complex floor itself was already implemented like described
> in
>       the paper,
> 
>       but A∣B was not.
> 
>       
> 
>       Now (SVN 969) the complex A∣B is computed as
> 
>       
> 
>       Z←B-A×⌊B÷A+A=0
> 
>       
> 
>       without any attempts to improve the performance of the
> operation.
> 
>       
> 
>       The result in the 5J3 modulus are now the same as in IBM
>       APL2 (and I suppose also in J)
> 
>       
> 
>             5J3 ∣ 14J5
>           1J4 ¯4J1 
> 
>         ¯4J1 ¯4J1 ¯4J1
> 
>       
> 
>       I hope this finally fixed it. Thanks a lot to all that helped
>       fixing this bug.
> 
>       
> 
>       /// Jürgen
> 
>     
> 
>     
> 
>     On 06/23/2017 09:34 AM, Jay Foad wrote:
> 
>     
>     
> >       I urge you to read Eugene McDonnell's Complex
> >           Floor, which also discusses Residue. I believe the design
> >         he comes up with in this paper was adopted more or less
> > verbatim
> >         in APL. Also bear in mind that Floor and Residue in APL
> > have to
> >         work well on all complex numbers, not just the Gaussian
> >         integers.
> >         
> > 
> >         
> >         Jay.
> >       
> >       
> > 
> >         On 23 June 2017 at 01:42, Frederick
> >           Pitts <fred.pi...@comcast.net>
> >           wrote:
> > 
> >           
> > >             
> > >               Hello Jürgen,
> > >               
> > > 
> > >               
> > >                Some observations:
> > >               
> > > 
> > >               
> > >               1) When performing a residue calculation on
> > > positive
> > >                 integers, a straight-forward integer division
> > > with
> > >                 remainder calculation
> > >               suffices. For example, 5 ∣ 13 is computed with 13 /
> > > 5
> > >                 = 2 r 3 and so 5 ∣ 13 = 3 where 3 is in the
> > > complete
> > >                 residue system
> > >               { 0, 1, 2, 3, 4 }. When performing the calculation
> > > on
> > >                 negative integers, one has to take advantage of
> > > the fact
> > >                 that the
> > >               integer division quotient and remainder are not
> > >                 unique in order to compute a residue that is in
> > > the
> > >                 complete residue system.
> > >               For 5 ∣ ¯13, ¯13 / 5 = ¯2 r ¯3 where ¯3 is not in
> > > the
> > >                 CRS. However, ¯13 / 5 = ¯3 r 2 where 3 is in the
> > > CSR.
> > >                 The same concept applies Gaussian integers.
> > >               
> > > 
> > >               
> > >               2) I suspect the decision to have the APL2 floor
> > >                 function round toward negative infinity, instead
> > > of
> > >                 toward zero,
> > >               was made based on the desire to save cpu cycles and
> > >                 memory in the residue function code.
> > >               
> > > 
> > >               
> > >               3) I read at least one math literature article
> > >                 discussing Gaussian integer Euclidean division
> > >                 algorithms, that recommended
> > >               rounding down to the nearest real and imaginary
> > > part
> > >                 toward negative infinity. Unfortunately I cannot
> > > find
> > >               the article right now. I will continue to look for
> > >                 it. None of the articles discussed using a
> > > complex
> > >                 integer floor function.
> > >               
> > > 
> > >               
> > >               4) The reason MOD_TEST.apl shows total disagreement
> > >                 MODJ and the builtin residue function is that the
> > >                 complex floor function code change in SVN 965
> > > relocated
> > >                 the CRS's on complex plane. Attached are
> > >                 CRS0-CRS1-6J-6-SVN964.out
> > >               CRS0-CRS1-6J-6-SVN965.out. The first file contains
> > > a
> > >                 CRS map for modulus ¯6J¯6 produced with the
> > > residue
> > >                 function
> > >               followed by a map for the same modulus produced
> > > with
> > >                 MODJ using SVN 964. The second file contains the
> > > same
> > >                 maps
> > >               using SVN 965. Observe that for SVN 964 the residue
> > >                 function CRS is in the bottom half of the complex
> > > plane,
> > >                 but for SVN 965 it is in the top half. The CRS
> > > for the
> > >                 MODJ function is in the bottom half in both SVN
> > > cases.
> > >               5)The complex floor code change did not help with
> > > the
> > >                 issue that the builtin residue function is not
> > >                 idempotent for all possible arguments and
> > > consequently
> > >                 generates too many residues. See attached
> > >                 CRSOTST0-SVN965.out. For a grid
> > >               of Gaussian integers with real and imaginary parts
> > >                 ranging from ¯15 to 15, using every value with
> > > every
> > >                 other value as modulus and second argument, there
> > > were
> > >                 40 case where the order of CSR exceeded the
> > > modulus
> > >                 norm. I think that
> > >               was the failure count with the previous SVN.
> > >               
> > > 
> > >               
> > >                Sincerely, I think the complex floor and ceiling
> > >                 functions should not be used by other functions
> > > even if
> > >                 IBM and ISO
> > >               imply they are in their documentations. I'm not
> > >                 seeing them used in the Gaussian integer
> > > literature.
> > >                 Again, please correct me if I'm wrong.
> > >               
> > > 
> > >               
> > >               Regards,
> > >               
> > > 
> > >               
> > >               Fred
> > >               
> > >                 
> > >                   
> > > 
> > >                   
> > >                   On Thu, 2017-06-22 at 18:08 +0200, Juergen
> > >                     Sauermann wrote:
> > >                   
> > > >  Hi again,
> > > > 
> > > >                     
> > > > 
> > > >                     sorry a small typo below. Lines 19/20
> > > > should read:
> > > > 
> > > >                     
> > > > 
> > > >                           (¯6J¯5 - 0J¯11) ÷ ¯6J¯6 
> > > > 
> > > >                     0J¯1
> > > > 
> > > >                     
> > > > 
> > > >                     /// Jürgen
> > > > 
> > > >                     
> > > > 
> > > >                     On
> > > >                       06/22/2017 05:44 PM, Juergen Sauermann
> > > > wrote:
> > > > 
> > > >                     
> > > >                     
> > > > >  Hi Fred at al.,
> > > > > 
> > > > >                         
> > > > > 
> > > > >                         I have made another attempt to fix
> > > > > the residue
> > > > >                         function, SVN 965.
> > > > > 
> > > > >                         
> > > > > 
> > > > >                         For complex m∣b It now rounds down
> > > > > the
> > > > >                         real() and imag() parts of the
> > > > > quotient q←b÷m
> > > > >                         and returns b-q.
> > > > > 
> > > > >                         Instead of always rounding towards 0
> > > > > or
> > > > >                         -infinity, the rounding direction is
> > > > > now
> > > > >                         (compared to the previous
> > > > > 
> > > > >                         attempt) determined by the quadrant
> > > > > in which the
> > > > >                         modulus m lies.
> > > > > 
> > > > >                       
> > > > > 
> > > > >                       There are still differences to the
> > > > > results
> > > > >                       displayed by MOD_test.apl, but I
> > > > > suppose
> > > > >                         they are
> > > > > 
> > > > >                         caused by that program. For example,
> > > > > the first
> > > > >                         line of MOD_test.apl, says:
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           LA    RA   MODJ   |
> > > > > 
> > > > >                           ¯6J¯6 ¯6J¯5   0J¯11  0J1
> > > > > 
> > > > >                         
> > > > > 
> > > > >                         We have:
> > > > > 
> > > > >                         
> > > > > 
> > > > >                               (¯6J¯5 - 0J1) ÷ ¯6J¯6 
> > > > > 
> > > > >                         1
> > > > > 
> > > > >                               (0J¯11 - 0J1) ÷ ¯6J¯6
> > > > > 
> > > > >                         1J1
> > > > > 
> > > > >                         
> > > > > 
> > > > >                         so both 0J¯11 and 0J1 are valid
> > > > >                         remainders modulo ¯6J¯6. However, the
> > > > > 
> > > > >                         magnitude of 0J¯11 (= 11)
> > > > >                         is larger than the magnitude of the
> > > > > divisor ¯6J¯6 (= around
> > > > >                           8.4).
> > > > > 
> > > > >                           I suppose most people expect the
> > > > > remainder of
> > > > >                           a division to be in some sense
> > > > > 
> > > > >                           smaller than the divisor.
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           Regarding Jay's idempotency
> > > > > requirement we now
> > > > >                           have:
> > > > > 
> > > > >                           
> > > > > 
> > > > >                                 f←{6J6|⍵}
> > > > > 
> > > > >                                     f ¯3 ¯2 ¯3 ¯1 0 1 2 3
> > > > > 
> > > > >                               3J6 4J6 3J6 5J6 0 ¯5J6 ¯4J6
> > > > > ¯3J6
> > > > > 
> > > > >                                     f f ¯3 ¯2 ¯3 ¯1 0 1 2 3
> > > > > 
> > > > >                               3J6 4J6 3J6 5J6 0 ¯5J6 ¯4J6
> > > > > ¯3J6
> > > > > 
> > > > >                           
> > > > > 
> > > > >                                     f←{5J3|⍵}
> > > > > 
> > > > >                                     f ¯3 ¯2 ¯3 ¯1 0 1 2 3
> > > > > 
> > > > >                               2J3 3J3 2J3 4J3 0 ¯2J5 ¯1J5 0J5
> > > > > 
> > > > >                                     f f ¯3 ¯2 ¯3 ¯1 0 1 2 3
> > > > > 
> > > > >                               2J3 3J3 2J3 4J3 0 ¯2J5 ¯1J5 0J5
> > > > > 
> > > > >                             
> > > > > 
> > > > >                           so at least the first modulus seems
> > > > > to work as
> > > > >                           well. The result is still different
> > > > > 
> > > > >                           from APL2 as reported by Jay, but I
> > > > > can't tell
> > > > >                           why:
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           IBM APL2:
> > > > > 
> > > > >                           
> > > > > 
> > > > >                                
> > > > >                               5J3 ∣ 14J5 1J4 ¯4J1
> > > > > 
> > > > >                       ¯4J1
> > > > >                             ¯4J1
> > > > >                             ¯4J1
> > > > > 
> > > > >                               
> > > > > 
> > > > >                             GNU APL:
> > > > > 
> > > > >                       
> > > > > 
> > > > >                            
> > > > >                                   5J3 ∣ 14J5 1J4 ¯4J1 
> > > > > 
> > > > >                                 1J4 1J4 1J4
> > > > > 
> > > > >                               
> > > > > 
> > > > >                             But both 1J4 and ¯4J1
> > > > >                           are valid remainders. Interestingly
> > > > > Jay's
> > > > >                           idempotency requirement seems to
> > > > > 
> > > > >                           be fulfilled by both the GNU APL
> > > > > and by IBM
> > > > >                           APL2, so that that requirement
> > > > > alone does not
> > > > >                           suffice
> > > > > 
> > > > >                           to tell which result is correct.
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           On the other hand this matter seems
> > > > > to be like
> > > > >                           discussing if the square root of 4
> > > > > is 2 or -2
> > > > >                           with
> > > > > 
> > > > >                           both answers being correct.
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           Best Regards,
> > > > > 
> > > > >                           Jürgen Sauermann
> > > > > 
> > > > >                           
> > > > > 
> > > > >                           
> > > > > 
> > > > >                         
> > > > > 
> > > > >                            
> > > > >                       On
> > > > >                         06/21/2017 10:25 PM, Frederick Pitts
> > > > > wrote:
> > > > > 
> > > > >                       
> > > > >                       
> > > > > >                         Jürgen,
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                          The proposed change to DIVJ does
> > > > > > not work
> > > > > >                           because 'q1' is a complex number,
> > > > > > so the '×'
> > > > > >                           in '× q1' is the complex
> > > > > > complement function,
> > > > > >                           not the sign function. I tried
> > > > > > the proposed
> > > > > >                           change and every test fails.
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                          I will try to hack DIVJ to use a
> > > > > > floor
> > > > > >                           towards zero instead of towards
> > > > > > minus infinity
> > > > > >                           for the real and imaginary
> > > > > >                         parts of the quotient and see what
> > > > > > happens.
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                          Correct me if I am wrong, but my
> > > > > > mind set
> > > > > >                           is that the APL residue function
> > > > > > has to
> > > > > >                           satisfy the following invariants:
> > > > > >                         1) The order of the complete
> > > > > > residue system
> > > > > >                           (residue count) for a given
> > > > > > modulo 'n' has to
> > > > > >                           equal the norm of 'n'.
> > > > > >                         2) And as Jay Foad so succinctly
> > > > > > expressed
> > > > > >                           it, the residue function has to
> > > > > > be idempotent
> > > > > >                           with respect to its right
> > > > > > argument,
> > > > > >                          e.g., ( n | m ) = n | n | m .
> > > > > >                         regardless of the implementation of
> > > > > > the
> > > > > >                           residue function.
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         Later,
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         Fred 
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         
> > > > > > 
> > > > > >                         
> > > > > >                         On Wed, 2017-06-21 at 19:46 +0200,
> > > > > > Juergen
> > > > > >                           Sauermann wrote:
> > > > > >                         
> > > > > > >  Hi Fred,
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             I have a question about the
> > > > > > > MOD_test.apl
> > > > > > >                             that you kindly provided.
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             In function DIVJ on line 57
> > > > > > > ff it
> > > > > > >                             says:
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             z
> > > > > > >                                 ← q , a - b × q ← CMPLX ⌊
> > > > > > > ( 9 11 ) ○ a ÷
> > > > > > >                                 b
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             so the quotient is rounded
> > > > > > > down towards
> > > > > > >                             minus infinity.
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             I wonder if that should be
> > > > > > > something like
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             z
> > > > > > >                                 ← q , (× q1) × a - b × q
> > > > > > > ← CMPLX ⌊ ∣ 9
> > > > > > >                                 11 ○ q1 ← a ÷ b
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             so that the quotient is
> > > > > > > rounded towards 0?
> > > > > > >                             Interestingly IBM and ISO
> > > > > > > 
> > > > > > >                             give different definitions
> > > > > > > for the residue
> > > > > > >                             in terms of APL:
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             IBM (language reference, page
> > > > > > > 227):
> > > > > > > 
> > > > > > >                             Z←L∣R
> > > > > > > 
> > > > > > >                               Z is R-L×⌊ R÷L+L=0
> > > > > > > 
> > > > > > >                             
> > > > > > > 
> > > > > > >                             ISO (chapter 7.2.9 Residue): 
> > > > > > > 
> > > > > > >                             R←Q∣P
> > > > > > > 
> > > > > > >                               R←P-(×P)×|Q×⌊|P÷Q
> > > > > > > 
> > > > > > >                                 and return R if (×R)=×Q,
> > > > > > > or R+Q
> > > > > > > 
> > > > > > >                                 otherwise.
> > > > > > > 
> > > > > > >                                
> > > > > > > 
> > > > > > >                           That suggest that IBM rounds
> > > > > > > the quotient down
> > > > > > >                           towards minus infinity while
> > > > > > > ISO rounds
> > > > > > > 
> > > > > > >                            towards 0.
> > > > > > > 
> > > > > > >                           
> > > > > > > 
> > > > > > >                           My naive view on remainder is
> > > > > > > that the nearest
> > > > > > >                           integer quotient shall be
> > > > > > > smaller in
> > > > > > > 
> > > > > > >                           magnitude and not smaller in
> > > > > > > value. Regarding
> > > > > > >                           your proposal (which is
> > > > > > > different from
> > > > > > > 
> > > > > > >                           both IBM and ISO) my concern is
> > > > > > > that may lead
> > > > > > >                           to different results for modulo
> > > > > > > N and
> > > > > > > 
> > > > > > >                           modulo N×1J0
> > > > > > > 
> > > > > > >                           
> > > > > > > 
> > > > > > >                           Best Regards,
> > > > > > > 
> > > > > > >                           Jürgen Sauermann
> > > > > > > 
> > > > > > >                           
> > > > > > > 
> > > > > > >                           
> > > > > > > 
> > > > > > >                           On
> > > > > > >                             06/21/2017 03:08 AM,
> > > > > > > Frederick Pitts wrote:
> > > > > > > 
> > > > > > >                           
> > > > > > >                           
> > > > > > > >                             Jürgen,
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                               
> > > > > > > >                              This
> > > > > > > >                                 message is being resent
> > > > > > > > because last
> > > > > > > >                                 minute changes I made
> > > > > > > > to CRS0.apl and
> > > > > > > >                                 CRS1.apl do not output
> > > > > > > > the
> > > > > > > >                             data I
> > > > > > > >                                 intended.  This message
> > > > > > > > has corrected
> > > > > > > >                                 versions of those files
> > > > > > > > attached. 
> > > > > > > >                                 Please discard the old
> > > > > > > > CRS0.apl and
> > > > > > > >                                 CRS1.apl files.  The
> > > > > > > > first line of
> > > > > > > >                                 output is the modulo
> > > > > > > > basis, the second
> > > > > > > >                                 line is the calculated
> > > > > > > > complete residue
> > > > > > > >                                 system values and the
> > > > > > > > third line is the
> > > > > > > >                                 number of residues in
> > > > > > > > the CRS on the
> > > > > > > >                                 previous line.
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                               
> > > > > > > >                             
> > > > > > > >                                 CRSOTST0.apl and
> > > > > > > > CRSOTST1.apl are
> > > > > > > >                                 unchanged.
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                               
> > > > > > > >                              Also
> > > > > > > >                                 please find attached
> > > > > > > > MOD_TEST.apl which
> > > > > > > >                                 compares the residues
> > > > > > > > calculated by MODJ
> > > > > > > >                                 and the builtin residue
> > > > > > > > function and
> > > > > > > >                                 reports discrepancies. 
> > > > > > > > The first column
> > > > > > > >                                 of output is the modulo
> > > > > > > > basis, the
> > > > > > > >                                 second column the right
> > > > > > > > argument to the
> > > > > > > >                                 functions, the third
> > > > > > > > column the MODJ
> > > > > > > >                                 result and the fourth
> > > > > > > > column is the
> > > > > > > >                                 builtin residue
> > > > > > > > function result.
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                               
> > > > > > > >                             Regards
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                               
> > > > > > > >                             Fred
> > > > > > > >                             
> > > > > > > > 
> > > > > > > >                             
> > > > > > > >                             Hello Jürgen,
> > > > > > > >                                 SVN 964 moved us in
> > > > > > > > the right direction but not completely out of the
> > > > > > > >                             woods.  SVN 964 still
> > > > > > > > exhibits errors.  For instance
> > > > > > > >                                   2J6 | 5J5
> > > > > > > >                             ¯1J7
> > > > > > > >                                   2J6 | ¯1J7
> > > > > > > >                             ¯3J1
> > > > > > > >                                   2J6 | ¯3J1
> > > > > > > >                             ¯3J1
> > > > > > > >                                 I found this and
> > > > > > > > previous residue function errors using the attached APL
> > > > > > > >                             code files.  The files with
> > > > > > > > base name ending in '0' use the builtin residue
> > > > > > > >                             function.  Those with base
> > > > > > > > name ending in '1' use a residue function implemented
> > > > > > > >                             in APL.  The files with
> > > > > > > > base name beginning with 'CRSOTST' test if the order of
> > > > > > > >                             the complete residue system
> > > > > > > > (CRS) equals the norm of the modulo basis.  That
> > > > > > > >                             test fails for several
> > > > > > > > modulo bases, 2J6 being one of them, using the builtin
> > > > > > > >                             residue function. No errors
> > > > > > > > are detected with the APL implementation.  The other
> > > > > > > > files
> > > > > > > >                             can be used to plot the CRS
> > > > > > > > for a given modulo basis where 'a' and 'b' in
> > > > > > > >                             'a + b * i' are limited to
> > > > > > > > +15 to -15 range.  A full screen terminal window is
> > > > > > > >                             needed to see the plot.
> > > > > > > >                                 My APL
> > > > > > > > implementation of the residue function is very close to
> > > > > > > > what you
> > > > > > > >                             described in your previous
> > > > > > > > email.  Maybe comparing the two implementations will
> > > > > > > >                             give insight into why the
> > > > > > > > builtin residue function fails for some modulo bases.
> > > > > > > >                                 I make no assertion
> > > > > > > > that my implementation is correct in all
> > > > > > > >                             aspects.
> > > > > > > >                             Regards,
> > > > > > > >                             Fred
> > > > > > > >                             On Tue, 2017-06-20 at 14:14
> > > > > > > > +0200,
> > > > > > > >                               Juergen Sauermann wrote:
> > > > > > > >                             
> > > > > > > > >  Hi
> > > > > > > > >                                 Frederick,
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 the algorithm for A ∣
> > > > > > > > > B used in
> > > > > > > > >                                 GNU APL is this:
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 - compute the
> > > > > > > > > quotient Q←B÷A,
> > > > > > > > > 
> > > > > > > > >                                   - "round down" Q to
> > > > > > > > > the next
> > > > > > > > >                                     (complex) integer
> > > > > > > > > Q1,
> > > > > > > > > 
> > > > > > > > >                                   - return B - Q1×A
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 Now the problem seems
> > > > > > > > > to be what is
> > > > > > > > >                                 meant by "round
> > > > > > > > > down". There are two
> > > > > > > > >                                 candidates:
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                   Q1 ← ⌊
> > > > > > > > >                                     Q                
> > > > > > > > >                      
> > > > > > > > >                                         i.e. use APL
> > > > > > > > > floor to
> > > > > > > > >                                     round down Q
> > > > > > > > > 
> > > > > > > > >                                     Q1 ← Complex(
> > > > > > > > > floor(Q.real(),
> > > > > > > > >                                   floor(Q.imag())
> > > > > > > > >                                     )   i,e, use
> > > > > > > > > C/C++ floor()
> > > > > > > > >                                     to round down Q.
> > > > > > > > > 
> > > > > > > > >                                   
> > > > > > > > > 
> > > > > > > > >                                 In your  5J3 ∣ 14J5
> > > > > > > > > example, the
> > > > > > > > >                                 quotient is 2.5J¯0.5,
> > > > > > > > > which
> > > > > > > > >                                 gives different
> > > > > > > > > results for the APL
> > > > > > > > >                                 floor ⌊ and the C/C++
> > > > > > > > > floor().
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 The APL floor
> > > > > > > > > ⌊2.5J¯0.5 is
> > > > > > > > >                                 3J¯1 (a
> > > > > > > > >                                 somewhat dubious
> > > > > > > > > invention in the ISO
> > > > > > > > >                                 standard on page 19,
> > > > > > > > > which I used up to
> > > > > > > > > 
> > > > > > > > >                                 including SVN 963),
> > > > > > > > > while the
> > > > > > > > >                                 C/C++ floor() is
> > > > > > > > > 2J¯1.
> > > > > > > > >                                 The difference
> > > > > > > > > between the APL floor and
> > > > > > > > >                                 the C/C++ floor is
> > > > > > > > > 1.0 which,
> > > > > > > > > 
> > > > > > > > >                                 multiplied by the
> > > > > > > > > divisor, explains the
> > > > > > > > >                                 differences that we
> > > > > > > > > see.
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 As of SVN 964 I have
> > > > > > > > > changed the
> > > > > > > > >                                 residue function (∣)
> > > > > > > > > to use the
> > > > > > > > >                                 C/C++ floor instead
> > > > > > > > > of the APL floor.
> > > > > > > > >                                 The APL floor and
> > > > > > > > > 
> > > > > > > > >                                 Ceiling functions (⌊
> > > > > > > > > and ⌈)
> > > > > > > > >                                 are still using the
> > > > > > > > > apparently broken
> > > > > > > > >                                 definition in the ISO
> > > > > > > > > standard.
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 I hope this works
> > > > > > > > > better for you. At
> > > > > > > > >                                 least I am getting
> > > > > > > > > this in SVN 964:
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                       5J3 | 14J5
> > > > > > > > > 
> > > > > > > > >                                   1J4
> > > > > > > > > 
> > > > > > > > >                                         5J3 | 1J4
> > > > > > > > > 
> > > > > > > > >                                   1J4
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 whereas SVN 963 was
> > > > > > > > > giving:
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                       5J3 | 14J5
> > > > > > > > > 
> > > > > > > > >                                   ¯4J1
> > > > > > > > > 
> > > > > > > > >                                         5J3 | 1J4
> > > > > > > > > 
> > > > > > > > >                                   ¯4J1
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                                 Best Regards,
> > > > > > > > > 
> > > > > > > > >                                 /// Jürgen
> > > > > > > > > 
> > > > > > > > >                                 
> > > > > > > > > 
> > > > > > > > >                               
> > > > > > > > > 
> > > > > > > > >                               
> > > > > > > > > 
> > > > > > > > >                               On
> > > > > > > > >                                 06/19/2017 07:03 PM,
> > > > > > > > > Frederick Pitts
> > > > > > > > >                                 wrote:
> > > > > > > > > 
> > > > > > > > >                               
> > > > > > > > >                               
> > > > > > > > > >                                 Jürgen,
> > > > > > > > > > 
> > > > > > > > > >     With gnu apl (svn 961 on Fedora 25, Intel(R)
> > > > > > > > > > Core(TM) i7-6700
> > > > > > > > > > CPU), the residue function (∣) yields the
> > > > > > > > > > following:
> > > > > > > > > > 
> > > > > > > > > >       5J3 ∣ 14J5
> > > > > > > > > > 1J4
> > > > > > > > > >       5J3 | 1J4
> > > > > > > > > > ¯4J1
> > > > > > > > > >       5J3 | ¯4J1
> > > > > > > > > > ¯4J1
> > > > > > > > > > The above result means that two elements in the
> > > > > > > > > > complete residue system
> > > > > > > > > > (CSR) for mod 5J3 are equal, i.e. 1J4 = ¯4J1 mod
> > > > > > > > > > 5J3, which is not
> > > > > > > > > > allowed.  None of the elements of a CSR can be
> > > > > > > > > > equal modulo the CSR's
> > > > > > > > > > basis.
> > > > > > > > > > 
> > > > > > > > > > Regards,
> > > > > > > > > > 
> > > > > > > > > > Fred
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > >                               
> > > > > > > > > 
> > > > > > > > >                               
> > > > > > > > > 
> > > > > > > > >                             
> > > > > > > > 
> > > > > > > >                           
> > > > > > > 
> > > > > > >                           
> > > > > > > 
> > > > > > >                         
> > > > > > 
> > > > > >                       
> > > > > 
> > > > >                       
> > > > > 
> > > > >                     
> > > > 
> > > >                     
> > > > 
> > > >                   
> > > 
> > >                 
> > >               
> > >             
> > >           
> > 
> >         
> >         
> > 
> >       
> >     
> 
>     
> 
>   
> 

Reply via email to