Dear all, Lately i have been implementing a few algorithms from "Modern Computer Algebra". In the process of implementing Z[x] factorization i noticed the following strange behavior: cl_modint_ring basering = find_modint_ring(2); cl_univpoly_modint_ring ring = find_univpoly_ring(basering); cl_UP_MI x= ring->zero(); (x != ring->zero()) returns false (correct) (x == ring->zero()) returns false (incorrect) If i first compare x == x the behavior changes: (x == x) returns true (correct) (x != ring->zero()) returns true (incorrect) (x == ring->zero()) returns false (incorrect) Attached is a demonstrational program. I'm using cln version 1.1.13 compiled with gcc-4.2.2 on x86 (prescott). Could someone please tell me if this is fixed in cvs or being worked on?
Hi! Remco Bloemen wrote:
Lately i have been implementing a few algorithms from "Modern Computer Algebra". In the process of implementing Z[x] factorization i noticed the following strange behavior:
cl_modint_ring basering = find_modint_ring(2); cl_univpoly_modint_ring ring = find_univpoly_ring(basering); cl_UP_MI x= ring->zero();
(x != ring->zero()) returns false (correct) (x == ring->zero()) returns false (incorrect)
If i first compare x == x the behavior changes:
(x == x) returns true (correct) (x != ring->zero()) returns true (incorrect) (x == ring->zero()) returns false (incorrect)
Attached is a demonstrational program. I'm using cln version 1.1.13 compiled with gcc-4.2.2 on x86 (prescott).
Could someone please tell me if this is fixed in cvs or being worked on?
The bug is still there. I think it can only happen when x is the ring's zero, and only in Z/2Z and only on x86: The culprit seems to be the assembler function compare_loop_up in src/base/digitseq/cl_asm_i386_.cc. It doesn't work properly if the loop is empty. I just found that out, but it is too late to work on a patch now and I won't have time the next two weeks. Can you, please, try to fix this yourself and send a patch? Regards -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>
Hi Richard, On Friday 02 November 2007 00:52:44 Richard B. Kreckel wrote:
Hi!
Remco Bloemen wrote:
Lately i have been implementing a few algorithms from "Modern Computer Algebra". In the process of implementing Z[x] factorization i noticed the following strange behavior:
cl_modint_ring basering = find_modint_ring(2); cl_univpoly_modint_ring ring = find_univpoly_ring(basering); cl_UP_MI x= ring->zero();
(x != ring->zero()) returns false (correct) (x == ring->zero()) returns false (incorrect)
If i first compare x == x the behavior changes:
(x == x) returns true (correct) (x != ring->zero()) returns true (incorrect) (x == ring->zero()) returns false (incorrect)
Attached is a demonstrational program. I'm using cln version 1.1.13 compiled with gcc-4.2.2 on x86 (prescott).
Could someone please tell me if this is fixed in cvs or being worked on?
The bug is still there. I think it can only happen when x is the ring's zero, and only in Z/2Z and only on x86: The culprit seems to be the assembler function compare_loop_up in src/base/digitseq/cl_asm_i386_.cc. It doesn't work properly if the loop is empty.
I just found that out, but it is too late to work on a patch now and I won't have time the next two weeks. Can you, please, try to fix this yourself and send a patch?
Regards -richy.
I have looked at the code, but i could only conclude the following: my assembler is even worse than my german. I'm afraid fixing assembler code is way over my head, otherwise i would have loved to send you a patch. PS: I am moving to a new 64-bits laptop and i can confirm that the bug does not exist there. Kind regards, Remco
Hi, I comiled bug.cpp on my iMac (G5) and got this output: [Session started at 2007-11-03 18:50:19 +0100.] (x != ring->zero()) = false (correct) (x == ring->zero()) = true (correct) cln_test has exited with status 0. Greetings Peter Am 03.11.2007 um 18:01 schrieb Remco Bloemen:
Hi Richard,
On Friday 02 November 2007 00:52:44 Richard B. Kreckel wrote:
Hi!
Remco Bloemen wrote:
Lately i have been implementing a few algorithms from "Modern Computer Algebra". In the process of implementing Z[x] factorization i noticed the following strange behavior:
cl_modint_ring basering = find_modint_ring(2); cl_univpoly_modint_ring ring = find_univpoly_ring(basering); cl_UP_MI x= ring->zero();
(x != ring->zero()) returns false (correct) (x == ring->zero()) returns false (incorrect)
If i first compare x == x the behavior changes:
(x == x) returns true (correct) (x != ring->zero()) returns true (incorrect) (x == ring->zero()) returns false (incorrect)
Attached is a demonstrational program. I'm using cln version 1.1.13 compiled with gcc-4.2.2 on x86 (prescott).
Could someone please tell me if this is fixed in cvs or being worked on?
The bug is still there. I think it can only happen when x is the ring's zero, and only in Z/2Z and only on x86: The culprit seems to be the assembler function compare_loop_up in src/base/digitseq/ cl_asm_i386_.cc. It doesn't work properly if the loop is empty.
I just found that out, but it is too late to work on a patch now and I won't have time the next two weeks. Can you, please, try to fix this yourself and send a patch?
Regards -richy.
I have looked at the code, but i could only conclude the following: my assembler is even worse than my german. I'm afraid fixing assembler code is way over my head, otherwise i would have loved to send you a patch.
PS: I am moving to a new 64-bits laptop and i can confirm that the bug does not exist there.
Kind regards, Remco _______________________________________________ CLN-list mailing list CLN-list@ginac.de https://www.cebix.net/mailman/listinfo/cln-list
Remco Bloemen wrote:
I have looked at the code, but i could only conclude the following: my assembler is even worse than my german. I'm afraid fixing assembler code is way over my head, otherwise i would have loved to send you a patch.
Okay, thank you very much for volunteering as tester! :-P Please test this patch: <http://www.ginac.de/viewcvs/cln/src/base/digitseq/cl_asm_i386_.cc?r1=1.2&r2=1.3> regards -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>
Hi, I compiled bug.cpp on MacBook Pro and got the following outputs: without patch: [Session started at 2007-11-04 02:28:29 +0100.] (x != ring->zero()) = true (incorrect) (x == ring->zero()) = false (incorrect) and after compiling with patch installed: [Session started at 2007-11-04 03:09:26 +0100.] (x != ring->zero()) = false (correct) (x == ring->zero()) = true (correct) regards Peter Am 03.11.2007 um 23:56 schrieb Richard B. Kreckel:
Remco Bloemen wrote:
I have looked at the code, but i could only conclude the following: my assembler is even worse than my german. I'm afraid fixing assembler code is way over my head, otherwise i would have loved to send you a patch.
Okay, thank you very much for volunteering as tester! :-P
Please test this patch: <http://www.ginac.de/viewcvs/cln/src/base/digitseq/cl_asm_i386_.cc? r1=1.2&r2=1.3>
regards -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/> _______________________________________________ CLN-list mailing list CLN-list@ginac.de https://www.cebix.net/mailman/listinfo/cln-list
participants (3)
-
Peter Haefeli
-
Remco Bloemen
-
Richard B. Kreckel