;;; .EnTete "Le-Lisp (c) version 15.2" " " "Test des fonctions sur Q" ;;; .EnPied "testratio.ll" "%" " " ;;; ;;; .SuperTitre "Test des fonctions sur Q" ;;; ;;; ;;; .Centre "*****************************************************************" ;;; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. " ;;; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly " ;;; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA " ;;; .Centre "*****************************************************************" ;;; ;;; .Centre "$Header: testratio.ll,v 4.1 88/01/13 12:32:23 kuczynsk Rel $" (unless (>= (version) 15.2) (error 'load 'erricf 'testratio)) (unless (featurep 'ratio) (print "Je charge les rationels interpretes") (libload ratio t)) (libload testgenr t) ; Re'sultats du bench arithme'tique sur diverses machines: (de hit-parade () (print "Le Hit Parade De l'Arithme'tique LeLisp sur Diverses Machines") (print "Porteurs, envoyez vos re'sultats a` vuillemin@inria. Merci!") (print) (print "Machine Config Type du bench Ancien Bench Temps Total") (print "sps7 8M interprete 28.83 ??") (print "sps7 8M compile mou 5.73 ??") (print "sps7 8M compile dur 2.02 ??") (print) (print "Vax750 VMS interprete 27.01 70.7") (print "Vax750 VMS compile mou 5.96 18.9") (print "Vax750 VMS compile dur 1.94 5.53") (print) (print "sun2 4M interprete 25.10 ??") (print "sun2 4M compile mou 5.41 ??") (print "sun2 4M compile dur 1.82 ??") (print) (print "hp9000-300 68020 interprete 10.40 ??") (print "hp9000-300 68020 compile mou 2.66 ??") (print "hp9000-300 68020 compile dur .87 ??") (print) (print "Ridge 4M ROS 3.3 interprete 12.78 32.46") (print "Ridge 4M ROS 3.3 compile mou 2.93 9.74") (print "Ridge 4M ROS 3.3 compile dur .87 2.70") (print) (print "Vax785 Unix interprete 10.61 27.54") (print "Vax785 Unix compile mou 2.21 7.01") (print "Vax785 Unix compile dur .75 2.25") (print) (print "Sun3/75 Unix interprete 8.51 21.96") (print "Sun3/75 Unix compile mou 1.84 5.66") (print "Sun3/75 Unix compile dur .56 1.66") (print) (print "Vax8600 Ultrix interprete 4.91 13.11") (print "Vax8600 Ultrix compile mou .89 2.90") (print "Vax8600 Ultrix compile dur .31 .90") ) (defvar #:sys-package:colon 'R) ;.Section "Nombres Harmoniques et Fonction Zeta." ; Calcule 1 + 1/2**e + 1/3**e + ... + 1/n**e ; Teste les rationnels. (de zeta (n e) (let ((r 0)) (for (i 1 1 n) (setq r (+ r (1/ (** i e))))) r)) ; "Le nombre :e(n) = 1 + 1/2! + ... + 1/n!" (de serie-e (n) (let ((e 1)) (for (i 1 1 n) (setq e (+ e (1/ (fact i))))) e)) ; "Teste l'addition sur N" (de fib+ (n) (let ((fn 0) (fn+1 1)) (repeat n (psetq fn+1 (+ fn fn+1) fn fn+1)) fn)) (defvar v32 (** 10 9)) ; Teste l'arithme'tique entre 16 et 32 bits. (de fub (n) (cond ((= n v32) v32) ((= n (+ v32 1)) (+ v32 1)) (t (+ (fub (1- n)) (fub (- n 2)))))) ; Teste les sommes et produits 32 bits. (de sommes (n) (repeat n (+ v32 v32) (* v32 v32))) ; Tente de mesurer le temps de calcul de exp: (de ebench (exp) (let ((tps 0.)) (repeat 5 (gc) (setq tps (+ tps (time '(eval exp))))) (setq tps (/ tps 5)) (print "Temps de " exp " = " tps) tps)) ; Tente de mesurer le temps de diverses fonctions arithme'tiques: (print "Faire (bench) pour le benchmark") (print "Essayer (bench) en interpre'te' et en compile', par les 2 compilos") (print "Ne pas oublier (compile-all-in-core) pour compiler le bench lui-mm") (de bench arg (if (null arg) (lebench) (let ((tps)) (let ((#:sys-package:itsoft 'test)) (setq tps (lebench))) (print " Temps total = " tps)))) (de lebench () (hit-parade) (let ((tps 0)) (setq tps (+ tps (ebench '(fib+ 200)))) (setq tps (+ tps (ebench '(fib 500)))) (setq tps (+ tps (ebench '(fact 200)))) (setq fib1000 (fib 1000)) (setq fact200 (fact 200) fact150 (fact 150)) (setq tps (+ tps (ebench '(quotient fact200 fact150)))) (setq tps (+ tps (ebench '(zeta 10 3)))) (setq tps (+ tps (ebench '(serie-e 10)))) (print "Temps de l'ancien bench = " tps) (setq tps (+ tps (ebench '(let ((#:sys-package:itsoft (cons 'testprint #:sys-package:itsoft))) (print fib1000))))) (setq tps (+ tps (ebench '(fub (+ v32 12))))) (setq tps (+ tps (ebench '(integerp (zeta 12 3))))) (setq tps (+ tps (ebench '(sommes 1000)))) (print "Temps total du bench = " tps) )) ; Pour e'viter d'e'crire dans le test de vitesse du print: (de #:testprint:eol () (outpos 0)) ; Appel de la fonction de test (testfn ()) (test-serie "Test des rationnels" ()) 1/0 1/0 -2/0 -1/0 (1+ -2/0) -1/0 (+ -1/0 2/3) -1/0 (+ 1/0 -1/0) 0/0 (- 1/0) -1/0 (- 0/0) 0/0 (* -1/0 1/0) -1/0 (* 1/0 0) 0/0 (/ 999999999 81) 12345679 (/ -1/0) 0 (rationalp 1243245) 1243245 (rationalp 3/2) 3/2 (integerp -4/2) -2 (integerp 4/3) () (integerp 4/2) 2 (integerp 4/3) () (modulo (fact 13) (fact 9)) 0 (modulo (fact 34) (fact 24)) 0 ; (modulo (fact 34) (fact 13)) 0 (modulo (fact 57) (fact 21)) 0 (modulo (fact 40) (fact 39)) 0 (quotient (fact 59) (fact 58)) 59 (quotient 22685491128062564230891640495451214097 5281877500950955845296219748) 4294967295 (NUMERATOR -4/3) -4 (DENOMINATOR -4/3) 3 (NUMERATOR 7) 7 (DENOMINATOR 7) 1 (** 2 128) 340282366920938463463374607431768211456 (** 0 0) 0/0 (truncate 123456) 123456 (truncate -123456) -123456 ; (truncate (power 2 50)) 1125899906842624 (truncate (power 2 20)) 1048576 ; (truncate (power 10 10))) 10000000000 ; (truncate (- (power 2 50))) -1125899906842624 (truncate (- (power 2 20))) -1048576 ; (truncate (- (power 10 10)))) -10000000000 (truncate 123.456789) 123 (truncate 1234.56789) 1234 (truncate 12345.6789) 12345 (truncate 123456.789) 123456 (truncate 1234567.89) 1234567 (truncate 12345678.9) 12345678 (truncate -123.456789) -123 (truncate -1234.56789) -1234 (truncate -12345.6789) -12345 (truncate -123456.789) -123456 (truncate -1234567.89) -1234567 (truncate -12345678.9) -12345678 ; (truncate -14232453423.123423) -14232453423 (quotient 10011100.23 1) 10011100 (gcd 1769 551) 29 (gcd 12432245661452 314523541234) 2 (fact 42) 1405006117752879898543142606244511569936384000000000 (fib 250) 7896325826131730509282738943634332893686268675876375 (zeta 10 1) 7381/2520 (zeta 10 2) 1968329/1270080 (serie-e 20) 6613313319248080001/2432902008176640000 (float (setq e (serie-e 18))) 2.71828182845904523536 (+ e 0.0) 2.71828182845904523536 (* e 1.0) 2.71828182845904523536 (/ e 1.0) 2.71828182845904523536 (+ 1/0 1/0) 1/0 (+ (* -113/47 (quomod 22/7 -113/47)) #:ex:mod) 22/7 (- 1/0 1/0) 1/0 (test-serie "Fin du test" ()) () ()