Sujet : Re: Le calcul de la racine carré... pour des nuls :)
De : talon (at) *nospam* niobe.lpthe.jussieu.fr (Michel Talon)
Groupes : fr.sci.mathsDate : 09. Nov 2024, 19:39:17
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <672fac55$0$16825$426a34cc@news.free.fr>
References : 1 2 3 4 5 6 7 8 9 10 11 12
User-Agent : Mozilla Thunderbird
Le 09/11/2024 à 16:53, Samuel Devulder a écrit :
Le 09/11/2024 à 13:34, efji a écrit :
Ce n'est pas ce que je dis, j'ai juste dit que ça choque mes habitudes de vieux, mais pourquoi pas si on y gagne quelque chose. Mais en fait je ne vois pas ce qu'on y gagne 🙂
Une absence de typage rend les langages bien plus simples à l'usage. Il s'agit de langages de script pas de programmation. On écrit pas une application avec ca mais des maquettes pour tester rapidement un truc.
Lua va assez loin dans la réduction du nombre de types de données puis que tableaux et dictionnaires sont confondus, et à l'usage c'est très agréable je dois bien avouer.
sam.
Et bien, pour passer de langages récents à un langage très ancien voici une solution avec Common Lisp (en fait sbcl) qui lui aussi a l'avantage d'un programme non typé (sauf si on déclare le type des variables) avec gestion automatique de la mémoire, possibilité de programmer pas à pas à la console, comme python ou lua, mais en outre est compilé automatiquement (avec sbcl)
ce qui donne une vitesse d'exécution raisonnable, contrairement à python par exemple.
Voici le programme:
(defun print-bizarre-squares (N str)
(let ((k 1) (l 10))
(dotimes (i N 'done)
(let ((j (* i i)))
(when (<= l j)
(incf k)
(setq l (* 10 l)))
;; Here 10^(k-1) <= j < 10^k, j has k digits
(if (evenp k) (test-if-bizarre i j (expt 10 (/ k 2)) str))))))
(defun test-if-bizarre (i j l str)
(multiple-value-bind (a b) (floor (/ j l))
(if (= i (+ a (* l b))) (format str " ~7d ~d ~%" i j))))
(defparameter N (expt 10 7)) ; 10^7
(with-open-file (str "list-of-bizarre" :direction :output :if-exists :supersede)
(time (print-bizarre-squares N str)))
Le résultat est écrit dans "list-of-bizarre" et le temps d'éxécution est imprimé.
Sur ma machine (2993.03 BogoMIPS ) assez lente, j'obtiens:
Evaluation took:
7.894 seconds of real time
7.891697 seconds of total run time (7.887671 user, 0.004026 system)
[ Run times consist of 0.055 seconds GC time, and 7.837 seconds non-GC time. ]
99.97% CPU
11,815,133,039 processor cycles
486,145,312 bytes consed
Finalement le résultat obtenu est:
9 81
45 2025
55 3025
99 9801
703 494209
999 998001
4950 24502500
5050 25502500
7272 52881984
7777 60481729
9999 99980001
77778 6049417284
82656 6832014336
95121 9048004641
99999 9999800001
318682 101558217124
329967 108878221089
351352 123448227904
356643 127194229449
390313 152344237969
461539 213018248521
466830 217930248900
499500 249500250000
500500 250500250000
533170 284270248900
538461 289940248521
609687 371718237969
643357 413908229449
648648 420744227904
670033 448944221089
681318 464194217124
791505 626480165025
812890 660790152100
818181 669420148761
851851 725650126201
857143 734694122449
961038 923594037444
994708 989444005264
999999 999998000001
4444444 19753082469136
4927941 24284602499481
5072059 25725782499481
5555556 30864202469136
9372385 87841600588225
9999999 99999980000001
-- Michel Talon