Add procedure CUBE.
authorJoe Marshall <jmarshall@alum.mit.edu>
Mon, 6 Jul 2015 20:33:02 +0000 (13:33 -0700)
committerJoe Marshall <jmarshall@alum.mit.edu>
Mon, 6 Jul 2015 20:33:02 +0000 (13:33 -0700)
src/runtime/arith.scm
src/runtime/runtime.pkg

index c29a6c424aa3c4c8c413ee0edafb39613097cef2..8f81669eb71247556be4e4555265f2ce5e53c156 100644 (file)
@@ -632,6 +632,12 @@ USA.
       (make-ratnum (let ((n (ratnum-numerator q))) (int:* n n))
                   (let ((d (ratnum-denominator q))) (int:* d d)))
       (int:* q q)))
+
+(define (rat:cube q)
+  (if (ratnum? q)
+      (make-ratnum (let ((n (ratnum-numerator q))) (int:* n (int:* n n)))
+                  (let ((d (ratnum-denominator q))) (int:* d (int:* d d))))
+      (int:* q (int:* q q))))
 \f
 (define (rat:/ u/u* v/v*)
   (declare (integrate-operator rat:sign-correction))
@@ -998,6 +1004,7 @@ USA.
 (define-standard-unary real:invert (lambda (x) (flo:/ flo:1 x)) rat:invert)
 (define-standard-unary real:abs flo:abs rat:abs)
 (define-standard-unary real:square (lambda (x) (flo:* x x)) rat:square)
+(define-standard-unary real:cube (lambda (x) (flo:* x (flo:* x x))) rat:cube)
 (define-standard-unary real:floor flo:floor rat:floor)
 (define-standard-unary real:ceiling flo:ceiling rat:ceiling)
 (define-standard-unary real:truncate flo:truncate rat:truncate)
@@ -1947,6 +1954,9 @@ USA.
 
 (define (square z)
   (complex:* z z))
+
+(define (cube z)
+  (complex:* z (complex:* z z)))
 \f
 ;;; Replaced with arity-dispatched version in INITIALIZE-PACKAGE!.
 
index 03df60fe0efb540ace3b63410bc18fc7de88e65d..1b97debfdf22e77c6940ebda6949edd120da0271 100644 (file)
@@ -2925,6 +2925,7 @@ USA.
          >
          >=
          atan
+         cube
          error:not-complex
          error:not-exact
          error:not-exact-integer