You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.6 KiB
						
					
					
				| (defvar x1) | |
| (defvar x2) | |
| (defvar x3) | |
| (defvar y) | |
| (defvar z) | |
| 
 | |
| (defun elementary-benchmark (N repeat) | |
|   (setq x1 (floor (+ (isqrt (* 5 (expt 10 (* 4 N)))) (expt 10 (* 2 N))) 2)) | |
|   (setq x2 (isqrt (* 3 (expt 10 (* 2 N))))) | |
|   (setq x3 (+ (expt 10 N) 1)) | |
|   (format t "~&~%N = ~D, Multiplication x1*x2, divide times by ~D~%" N repeat) | |
|   (dotimes (count 3) | |
|     (time | |
|       (dotimes (_ repeat) | |
|         (setq y (* x1 x2))))) | |
|   (format t "~&~%N = ~D, Division (with remainder) x1 / x2, divide times by ~D~%" N repeat) | |
|   (dotimes (count 3) | |
|     (time | |
|       (dotimes (_ repeat) | |
|         (multiple-value-setq (y z) (floor x1 x2))))) | |
|   (format t "~&~%N = ~D, integer_sqrt(x3), divide times by ~D~%" N repeat) | |
|   (dotimes (count 3) | |
|     (time | |
|       (dotimes (_ repeat) | |
|         (setq y (isqrt x3))))) | |
|   (format t "~&~%N = ~D, gcd(x1,x2), divide times by ~D~%" N repeat) | |
|   (dotimes (count 3) | |
|     (time | |
|       (dotimes (_ repeat) | |
|         (setq y (gcd x1 x2))))) | |
| ) | |
| 
 | |
| (defun pari-benchmark (N repeat) | |
|   (format t "~&~%N = ~D, pari-benchmark, divide times by ~D~%" N repeat) | |
|   (dotimes (count 3) | |
|     (time | |
|       (dotimes (_ repeat) | |
|         (let ((u 1) (v 1) (p 1) (q 1)) | |
|           (do ((k 1 (1+ k))) | |
|               ((> k N) (setq y p z q)) | |
|             (let ((w (+ u v))) | |
|               (shiftf u v w) | |
|               (setq p (* p w)) | |
|               (setq q (lcm q w))))))))) | |
| 
 | |
| (defun integer-benchmark () | |
|   (elementary-benchmark 100 10000) | |
|   (elementary-benchmark 1000 1000) | |
|   (elementary-benchmark 10000 10) | |
|   (elementary-benchmark 100000 1) | |
|   (pari-benchmark 100 100) | |
|   (pari-benchmark 200 10) | |
|   (pari-benchmark 1000 1) | |
| )
 |