# Quirks and buglist for 0.4.6 (with a patch even :)

From: Squeak <squeak_at_xirr.com>
Date: Wed, 8 Sep 1999 01:54:00 -0400 (EDT)

Quirk: (10!)%5 != 10! mod 5 ( 0 != 1)

That is probably correct behavior though.

Quirk: 1^(-1) mod n yields "Can't do mods on floating or rational"

I would think 1/1 would be simplified to 1?

Quirk: multiple mods ALMOST work right
51 mod 49 mod 7
Division by zero!
= 2

a mod b mod c mod d mod e mod f ... = a mod gcd(b,c,d,e,f,...)

You give the right answer but the divide by zero is disturbing :)

Quirk: If you use the "mod n" notation, it might be a better idea to use
modulo arithemtic. Specifically 1/3 mod 5 = 2. And 1/2 mod 4 = Division
by zero divisor undefined.

Quirk (in nls): configure.in has more languages than the package does.. i
They might have got back in? I don't do nls, maybe it is supposed to be
that way.

Bug: |-3| mod 5 isn't 2 ... maybe thats a quirk .. but heres a bug
-3 mod 5 = 8 ... (-3) mod 5 as well... (answer should be 2, or as
worst case -3).

Quirk: 1 mod 0.5 = (1mod0.5) (Can't do mod calculations of non-integers)
Yet (1mod0.5) is a parse error, suggest putting space around the "mod"
word in the print e_tree or whatever.

Quibble: I think 2.345e+77-34i is unreadable and that results should have
spaces around the +, but it parses either way. Purely a pet peeve.

Quibble: Sometimes you use TRUE and sometimes you use 1 as the last arg to
print_e_tree. To make code leaner and meaner, it is good to make it easily

Quibble: MACROS make code harder to understand, inline functions are
debuggable and are just as fast in any recent (post 95) gcc. If a
commercial compiler can't keep up with gcc, you don't need to support it.
To find one bug in genius-0.4.2 i know i had to debug the source code
after running it thru the pre processor so i could see which out of 10
lines of code actually caused a segfault. :) Its your code though, so
write it how you will. :)

Grin: Those internel functions written in gel are cool. (Cool as in oh god
don't keep them that way, but wow what a cool temp. hack).

Quibble: on line 1065 ish of mpwrap ... it would be nice to note
that that crazy if( q < 0 && f> 0) then f=-f stuff is a /* XXX HACK to
get around bug in gmp */ Just in case someone else maintains the code at a
later point.

Question: Why downgrade to bison-1.25 from bison-1.27? Was there a problem
with bison-1.27? (I use bison-1.27 too so I'm curious)

I'll ask around on how to define ln(A) for matricies.

--- eval.c.old Wed Sep 8 01:28:06 1999
+++ eval.c Wed Sep 8 01:28:29 1999
@@ -3681,11 +3681,11 @@
mpw_mod(n->val.value,n->val.value,mod);
if(error_num) { /*XXX: for now ignore errors in moding*/
error_num = 0;
}
if(mpw_sgn(n->val.value)<0)
- mpw_sub(n->val.value,mod,n->val.value);