;;; -*- Mode:LISP; Package:USER; Readtable:CL; Base:10 -*- ;;; to produce the same results as fptst.c (defmacro time-operation (loops &body operations) "returns time in milliseconds for doing operation loops times" `(let ((time (get-internal-real-time))) (dotimes (j ,loops) ,@operations) (* 1000 (/ (- (get-internal-real-time) time) (float internal-time-units-per-second))))) ;; + - * / log exp sqrt expt sin cos tan (defun fptst (&key (value 127.125) (value2 2.77777) (loop 1000) (nloop 10000)) (let (ttime result +time -time *time /time logtime exptime sqrttime expttime sintime costime tantime nlooptime) (setq ttime (time-operation 1 (setq +time (time-operation loop (setq result (+ value value2)))) (setq -time (time-operation loop (setq result (- value value2)))) (setq *time (time-operation loop (setq result (* value value2)))) (setq /time (time-operation loop (setq result (/ value value2)))) (setq logtime (time-operation loop (setq result (log value)))) (setq exptime (time-operation loop (setq result (exp value)))) (setq sqrttime (time-operation loop (setq result (sqrt value)))) (setq expttime (time-operation loop (setq result (expt value value2)))) (setq sintime (time-operation loop (setq result (sin value)))) (setq costime (time-operation loop (setq result (cos value)))) (setq tantime (time-operation loop (setq result (tan value)))) (setq nlooptime (time-operation nloop (setq result value))))) ;; normalize (format t "~&Entire test took ~5$ seconds.~%" (/ ttime 1000)) (format t "Times in milliseconds per loop, minus ~5$ loop overhead~%" (/ nlooptime nloop)) (format t "Add: ~5$ Sub: ~5$ Mult: ~5$ Div: ~5$~%" (- (/ +time loop) (/ nlooptime nloop)) (- (/ -time loop) (/ nlooptime nloop)) (- (/ *time loop) (/ nlooptime nloop)) (- (/ /time loop) (/ nlooptime nloop))) (format t "log: ~5$ exp: ~5$ sqrt: ~5$ expt: ~5$~%" (- (/ logtime loop) (/ nlooptime nloop)) (- (/ exptime loop) (/ nlooptime nloop)) (- (/ sqrttime loop) (/ nlooptime nloop)) (- (/ expttime loop) (/ nlooptime nloop))) (format t "sin: ~5$ cos: ~5$ tan: ~5$~%" (- (/ sintime loop) (/ nlooptime nloop)) (- (/ costime loop) (/ nlooptime nloop)) (- (/ tantime loop) (/ nlooptime nloop)))))