When dividing a number relatively close to zero by an integer, the result unexpectedly gets clamped to zero:

      (2⋆¯34)÷1
0

Using ⌹ or ×÷ gives expected results instead.
Looks like it happens at the line IntCell.cc:543 which should be removed. But I don't think there should be a check for near-zero even in the zero-divisor branch. With float and complex divisors, an exact zero is tested instead.

      (2⋆¯34)÷0         ⍝ shouldn't that still be a domain error?
1
      (2⋆¯34)÷0J0       ⍝ like here
DOMAIN ERROR
      (2⋆¯34)÷0
      ^      ^

The complex one is missing a check for finiteness:

      (2⋆999)÷2⋆¯999    ⍝ correct: 2⋆1998 is not representable
DOMAIN ERROR
      (2⋆999)÷2⋆¯999
      ^      ^
      (2⋆999)÷2⋆¯999J0  ⍝ ??
∞

When trying to see if I can trigger the above, I also noticed that something is off with power too:

      2⋆¯999J0          ⍝ correct
1.866527237E¯301
      2J0⋆¯999          ⍝ ??
0
      2⋆9999            ⍝ this is probably wrong too
∞

There's also some error in parser:

      1.000000001E¯301
1000000001
      1.000000001E¯302
1.000000001E10
      1.000000001E¯308  ⍝ this is still representable as double
0


-k

Reply via email to