|
From: rtoy <rt...@us...> - 2025-09-09 15:17:10
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, bug-4607-cf-issues has been created
at 066bd4ad705cf0cd2557d9149bbbfc292f3330d8 (commit)
- Log -----------------------------------------------------------------
commit 066bd4ad705cf0cd2557d9149bbbfc292f3330d8
Author: Raymond Toy <toy...@gm...>
Date: Tue Sep 9 08:14:50 2025 -0700
Fix #4607: CF issues
This fixes the issues raised in bug #4607. This is the solution
provided by Michel Talon on the mailing list Sep 8, 2025. I applied
it unchanged.
diff --git a/src/combin.lisp b/src/combin.lisp
index f2b46865c..b70b66ccd 100644
--- a/src/combin.lisp
+++ b/src/combin.lisp
@@ -833,7 +833,7 @@
((floatp a)
(let ((a (maxima-rationalize a)))
(cons '(mlist cf) (ratcf (car a) (cdr a)))))
- (($bfloatp a)
+ ((and (eq (caar a) 'bigfloat) ($bfloatp a))
(let (($bftorat t))
(setq a (bigfloat2rat a))
(cons '(mlist cf) (ratcf (car a) (cdr a)))))
@@ -844,16 +844,23 @@
((eq (caar a) 'mlist)
(cfratsimp a))
;;the following doesn't work for non standard form
- ;; (cfplus a '((mlist) 0)))
- ((and (mtimesp a) (cddr a) (null (cdddr a))
+ ;; (cfplus a '((mlist) 0))) ??? seems to work
+ ((and (eq (caar a) 'mtimes) (mtimesp a) (cddr a) (null (cdddr a))
(fixnump (cadr a))
(mexptp (caddr a))
(fixnump (cadr (caddr a)))
(alike1 (caddr (caddr a)) '((rat) 1 2)))
(cfsqrt (cfeval (* (expt (cadr a) 2) (cadr (caddr a))))))
+ ;; case when a continuous fraction is raised to an integer power
+ ;; example ((MEXPT . #1=(SIMP)) ((MLIST . #1#) 1 3) 2)
+ ((and (eq (caar a) 'mexpt) (integerp (caddr a)) (> (caddr a) 0))
+ (cfexpt (cadr a) (caddr a)))
((eq (caar a) 'mexpt)
(cond ((alike1 (caddr a) '((rat) 1 2))
- (cfsqrt (cfeval (cadr a))))
+ (cfsqrt (cfeval (cadr a)))) ; square root of an integer
+ ((alike1 (caddr a) '((rat) -1 2))
+ (cfquot 1 (cfsqrt (cfeval (cadr a))))) ; inverse square root
+ ;;case when an integer is raised to some half integer power
((integerp (m* 2 (caddr a))) ; a^(n/2) was sqrt(a^n)
(cfsqrt (cfeval (cfexpt (cadr a) (m* 2 (caddr a))))))
((integerp (cadr a)) (cfnroot a)) ; <=== new case x
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|