$ time ./bench_dec.py
real 0m0,106s
user 0m0,100s
sys 0m0,004s
$ time ./bench_float.py
real 0m0,076s
user 0m0,076s
sys 0m0,000s
faut lancer le script en direct via le shebang#!/usr/bin/python3, sinon :
$ time python bench_dec.py
real 0m5,051s
user 0m5,044s
sys 0m0,000s
;-)
Le calcul en décimal est performant (c'est assez normal), mais son usage me semble toujours bien limité pour en faire le comportement par défaut. Il ferait mieux d'ajouter une syntaxe particulière de littéraux pour eux, que d'en faire la solution par défaut et de rajouter des testes dynamiques pour savoir s'il faut changer de représentation (ce qui dégraderait encore plus les performances).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Par contre on peut pas nier que le débat s'est élevé grandement. On a sorti perl et python et on fait des essais.
Ça dépend du point de vue, pour moi le débat a régressé. Il n'était nul besoin de sortir perl ou python pour constater les résultats : les tests montrent juste ce que la théorie permettait déjà de savoir, et encore, avec des tests on ne prouve jamais autant de chose qu'avec une théorie bien faite (mais bon, malheureusement, il semblait falloir en passer par là pour te raisonner).
Ça me rappelle un ancien journal de rewind dans laquelle l'approche théorique avait été dénigrée, voire présentée comme inutile, par plus d'un intervenant. Je cite à nouveau le passage d'un ouvrage que j'avais cité à l'époque :
On appelle théorie un ensemble même de règles pratiques, lorsque ces règles sont conçues comme des principes ayant une certaine généralité, et que l'on y fait abstraction d'une foule de conditions qui pourtant exercent nécessairement de l'influence sur leur application. Réciproquement on ne donne pas le nom de pratique à toute espèce d'œuvre, mais seulement à la poursuite d'un but, quand on le considère comme l'observation de certains principes de conduite conçue d'une manière générale.
Il est évident qu'entre la théorie et la pratique il doit y avoir encore un intermédiaire qui forme le lien et le passage de l'une à l'autre, quelque complète d'ailleurs que puisse être la théorie. En effet, au concept de l'entendement, qui contient la règle, doit se joindre un acte du Jugement par lequel le praticien discerne si la règle s'applique ou non au cas présent ; et, comme on ne saurait toujours fournir au jugement des règles qui lui servent à se diriger dans ses subsomptions (puisque cela irait à l'infini), on conçoit qu'il y ait des théoriciens qui ne puissent jamais devenir praticiens de leur vie, parce qu'ils manquent de jugement : par exemple des médecins ou des jurisconsultes, qui ont fait d'excellentes études, mais qui, lorsqu'ils ont à donner un conseil, ne savent comment s'y prendre. En revanche, chez ceux qui possèdent ce don de la nature, il peut y avoir défaut de prémisses, c'est-à-dire que la théorie peut être incomplète, car peut-être a-t-elle besoin, pour être complétée, d'essais et d'expériences qui restent encore à faire; c'est de là que le médecin qui sort de son école, ou l’agriculteur, ou le financier, peut et doit abstraire de nouvelles règles pour compléter sa théorie. Ce n’est pas alors la faute de la théorie, si elle n’a encore que peu de valeur pour la pratique; cela vient de qu’on n’a pas assez de théorie, de celle que l’homme aurait dû apprendre de l’expérience, et qui est la véritable théorie, alors même que l’on n’est pas en état de la tirer de soi-même et de l’exposer systématiquement, comme un professeur, dans des propositions générales, et que par conséquent on ne saurait avoir aucune prétention au titre de médecin, d’agriculteur ou de financier théoricien. Personne ne peut donc se donner pour un praticien exercé dans une science et mépriser la théorie sans faire preuve d’ignorance dans sa partie; car c’est être vraiment ignorant que de croire que l’on peut dépasser la théorie en tâtonnant dans la voie des essais et des expériences, sans recueillir certains principes (qui constituent proprement ce que l’on nomme théorie) et sans faire de tout ce travail un ensemble (qui, méthodiquement traité, prend le nom de système).
Cependant on souffrira plus patiemment encore un ignorant qui, fier de sa prétendue pratique, déclare la théorie inutile et superflue, qu’un présomptueux qui la proclame bonne pour les écoles (comme une manière d’exercer l’esprit), mais qui soutient qu’il en va tout autrement dans la pratique; que, quand on quitte l’école pour le monde, on s’aperçoit qu’on n’a poursuivi jusque-là que des idées vides et des rêves philosophiques; en un mot que ce qui peut être bon dans la théorie n’a aucune valeur dans la pratique. (C’est ce que l’on exprime souvent aussi de cette manière: telle ou telle proposition est bonne in thesi, mais non in hypothesi.) Or on ne ferait que rire d’un mécanicien ou d’un artilleur empirique qui trancherait sur la mécanique générale ou sur la théorie mathématique de la projection des bombes, en disant que cette théorie, si ingénieusement conçue qu’elle soit, ne vaut rien dans la pratique, parce que, dans l’application, l’expérience donne de tout autres résultats que la théorie. (En effet, si à la première on ajoute la théorie du frottement, et à la seconde celle de la résistance de l’air, c’est-à-dire en général plus de théorie encore, elles s’accorderont parfaitement avec l’expérience.) Mais autre chose est une théorie qui concerne des objets d’intuition, autre chose une théorie dont les objets ne sont représentés qu’au moyen de concepts, comme les objets mathématiques et ceux de la philosophie. Peut-être ces derniers sont-ils susceptibles d'être conçus dans toute leur perfection (du côté de la raison), mais ne le sont-ils pas d'être donnés , et n'offrent-ils ainsi que des idées vides dont on ne saurait faire dans la pratique aucun usage ou qu'un usage dangereux. Par conséquent le proverbe en question pourrait bien avoir sa vérité dans les cas de ce genre. Mais dans une théorie qui est fondée sur le concept du devoir il n'y a plus lieu de craindre l'idéalité vide de ce concept; car ce ne serait pas un devoir de se proposer un certain effet de notre volonté, si cet effet n'était pas possible dans l'expérience (quelque parfaite ou quelque rapprochée de la perfection qu'on pût la concevoir). Or il n'est question dans le présent traité que de cette espèce de théorie.Il n'est pas rare d'entendre soutenir, au grand scandale de la philosophie, que ce qu'elle peut avoir d'exact ne vaut rien dans la pratique ; on dit cela sur un ton fort dédaigneux, en affichant la prétention de réformer la raison par l'expérience, même dans ce qui fait son principal titre de gloire, et en se flattant de voir plus loin et plus sûrement avec des yeux de taupe cloués sur la terre qu'avec ceux d'un être fait pour se tenir debout et regarder le ciel.
Sauf que changer un type de base qui est utilisé dans les binding C
Je ne vois pas où ils ont changé un type de base, ils ont juste changé la signature d'une fonction. Avant on avait :
intdiv(inti,intj)
maintenant on a :
floatdiv(inti,intj)
C'est juste le type de sortie d'une fonction qui a changé, non la représentation en mémoire d'un type de base. C'est un léger changement d'interface et de sémantique pour une fonction, avec une autre fonction existante (//) ayant le même comportement que l'ancienne, pas de quoi fouetter un chat ni jouer à l'équilibriste en haut d'un immeuble de 42 étages par vent de force 5. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Pour la question de l'absence de typage statique, c'est loin d'être le seul défaut de python.
Pour rester sur la question de la rigueur mathématique, de toute façon, pour moi, dès qu'on sort de la programmation fonctionnelle avec typage statique, on n'est déjà plus très rigoureux (je tolère à la rigueur les effets de bords et le code impure, c'est-à-dire les valeurs mutables, mais au-delà de ça, on est trop loin de la conception mathématique du calcul).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Je reviens à ce que je dis : s'il-te-plait, donne moi un avantage du float par rapport au Decimal mis à part la perfo.
Dès que l'on quitte les opérations algébriques de base (addition, multiplication, soustraction) et qu'on en vient aux fonctions transcendantes1 (sinus, cosinus, logarithme, exponentielle…, voir le commentaire de Michaël). Si tu reprends l'article de Guido sur les raisons du changements pour la division sur les int :
(This recently happened to me in a program that draws an analog clock – the positions of the hands were calculated incorrectly due to truncation, but the error was barely detectable except at certain times of day.)
Pour dessiner une horloge analogique, il faut faire de la trigonométrie et donc utilise les float. ;-)
même avec les nombres algébriques (racines de polynômes à coefficients entiers) cela devient vite injouable de calculer exactement et de les comparer. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Je t'explique pas les problèmes de retro-compatibilité s'il fallait les interpréter par des décimaux :
type(2.3)<class'decimal.Decimal'>
il faudrait rajouter des float(...) partout dans le code existant :
type(float(2.3))<class'float'>
Ils n'ont pas déjà assez de problèmes avec le passage python 2.7 vers python 3 ?
Si tu veux des décimaux et gérer manuellement tes arrondis (et des problèmes d'arrondis, tu en auras), il y a un module pour cela : decimal. Si tu veux du calcul exact sur des fractions (sans problèmes d'arrondis avec les opérations algébriques), tu as un module pour cela : fractions. Sinon par défaut, comme dans tous les langages, tu te retrouves avec des nombres à virgule flottante ce qui n'est pas sans raison.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Merci de lire le 3e point de la page de la doc de Python. C'est exactement de ça dont je parle, c'est exactement la solution au problème exposé dans ce journal.
Eh bien ce que tu souhaites exactement (par défaut) est profondément ridicule. Quitte à choisir une représentation pour avoir de l'exactitude dans les calculs et perdre du temps (inutile dans la quasi totalité des applications), autant choisir celles des fractions : avec les décimaux tu n'as même pas la structure de corps (c'est pas « stable » par division comme type de données).
Maintenant que Python switche tout seul de l'int à l'IEEE quand il le juge bon, va-t-il un jour switcher de int à Decimal à IEEE quand il le juge bon ?
Et je t'ai répondu que ce n'est pas ce qu'il fait ! Il a juste changer la sémantique de l'opérateur / et son type de sortie. Avant / calculait le quotient euclidien et était de type int * int -> int, maintenant il calcule le résultat de la division en flottant et est de type int * int -> float. C'est juste un changement de sémantique (l'opérateur // étant là pour la division euclidienne) et non une adaptation au besoin de précision. Si vraiment, ils avaient voulu cela (ou s'ils le voulaient) il faudrait choisir le type Fraction en sortie et non le type Decimal.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
C'est sûr que c'est pas très lisible pour un CM2. :-P
L'écriture est lié au système de typage statique OCaml qui n'a pas de mécanisme à la type classes de Haskell. Du coup 2 est toujours interpréter comme étant de type int et ~$ est juste une notation infixe pour la fonction of_int.
L'idée était surtout de montrer qu'il n'y avait aucune difficulté à faire du calcul formel sur les rationnels, avec pour seul limite la capacité mémoire de la machine (python le fait aussi) : c'est juste coûteux en mémoire et plus long en calcul, mais inutile dans la plupart des applications (d'où le recours aux flottants par défaut dans tous les langages).
>>>fromfractionsimportFraction>>># attention à bien utiliser des strings...Fraction('2')-Fraction('1.8')-Fraction('0.2')Fraction(0,1)>>># avec les floats sa posera aussi problème...Fraction(2)-Fraction(1.8)-Fraction(0.2)Fraction(-1,18014398509481984)>>>Fraction('3')*Fraction('5/3')Fraction(5,1)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Je me dis aussi que vu que Python le fait déjà dans un autre cas
C'est pas tout à fait cela, il a changé la sémantique d'un de ces opérateurs sur les int, à savoir l'opérateur /, qui avant calculait le quotient euclidien et qui maintenant calcule la division dans le type float (ce qui ne change pas les problèmes d'arrondis et l'impossibilité d'avoir une représentation finie en base 2 pour certaines fractions).
Si tu veux calculer formellement sur des fractions en python, il faut utiliser le module fractions.
>>>fromfractionsimportFraction>>># attention à bien utiliser des strings...Fraction('2')-Fraction('1.8')-Fraction('0.2')Fraction(0,1)>>>Fraction('3')*Fraction('5/3')Fraction(5,1)>>># avec les floats ça posera aussi problème...Fraction(2)-Fraction(1.8)-Fraction(0.2)Fraction(-1,18014398509481984)
Pour avoir un jour un tel comportement par défaut, j'en doute : les besoins en calcul formel sur ce type de nombres sont trop rares (application de niche) pour en faire le comportement par défaut.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Mon prof de math justement, t'aurais mis 0, tu n'as pas indiqué la précision.
Il écrit des nombres décimaux, ce sont des valeurs tout a fait acceptables dont on n'a pas besoin d'indiquer la précision (sinon on indique un intervalle).
#install_printerQ.pp_print;;Q.(of_ints23*of_ints34);;(* 2/3 * 3/4 = 1/2 *)-:Q.t=1/2Q.(of_string"2"-of_string"18/10"-of_string"2/10");;(* 2 - 1.8 - 0.2 = 0 *)-:Q.t=0Q.(of_int2-of_float1.8-of_float0.2);;(* avec les float ça marche pas *)-:Q.t=-1/18014398509481984
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
D'autant que si on n'a pas déjà installé faketime, c'est plus long. Je ne sais pas comment fonctionne tous les systèmes, mais sur le mien ça ne fout pas le bordel. Si je n'enchaîne pas les deux commandes via le ;, mais l'une après l'autre, l'heure est déjà revenue à la normale.
$ date +%T -s "00:30:00"
00:30:00
$ man; date +%T
Quelle page de manuel voulez-vous ?
19:30:29
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Pour ma part, j'ai appris le système des bases en primaire. De mémoire, on avait un certain nombre de croix, de batons ou de points que l'on devait regrouper en ensemble de n éléments, puis on devait regrouper les groupes en surgroupes de n groupes, et ainsi de suite.
Itou. :-) De mémoire c'était surtout en CM1 et CM2 que l'on pratiquait ce genre d'analyse.
On avait également vu les règles de division par 3 ou 9 pour des nombres en base 10 avec compréhension de leur principe. Pour savoir si 54 est divisible par 3 (sans chercher dans ses tables ou effectuer la divison), il suffit de faire 5 + 4 = 9 et de constater que 9 est divisible par 3 donc 54 aussi. Le principe est simple quand on a compris le fonctionnement des bases : 54 c'est 5 paquets de dix et un paquet de 4. Or quand on divise un paquet de dix en trois personnes, chacun en a trois et il nous en reste un sur les bras. Donc avec cinq paquets, il nous en reste cinq sur les bras, plus les quatre unités cela fait neuf unités, que l'on peut alors répartir en trois par personnes.
Je me servais de ce genre de principe dans la cours quand on faisait du « plouf, plouf, amstramgram » pour choisir les membres de son équipe de foot : je savais par qui commencer pour avoir celui que je voulais, sans rien laisser au hasard. Les joies de l'arithmétique modulaire. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Pour continuer sur le même exemple, combien de bacheliers sont bien à l'aise avec les changements de base (de numération) ? C'est pourtant ça le recul indispensable à enseigner les techniques opératoires élémentaires au CP.
Il y a du y avoir des changements, avec les époques, sur ce qui était enseigné tant aux élèves qu'aux enseignants. Si je prends mon expérience personnelle : dans les années 80, à la sortie de mon primaire on nous avait appris le changement de base (essentiellement la conversion base 10 vers base 5, mais des fois aussi base 2 ou 3). Lorsque j'étais étudiant, je donnais des cours particuliers pour financer mes études : certains de mes élèves de terminale (en terminale S) galéraient pour la conversion base 10 vers base 5. Et pour la formation de mes institutrices : la plupart avaient fait l'école normale sans être bachelières. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
D'après l'article d'Europe1, le communiqué de la Fédération des Aveugles de France contiendrait ce passage : « Pour nous personnes aveugles, cette soi-disant langue inclusive est proprement indéchiffrable par nos lecteurs d'écrans ». Je m'inscris totalement en faux contre cet argument en vertu du principe, déjà invoqué, suivant : « c'est pas compatible avec les lecteurs d'écran pour malvoyants » est un argument faux, émis par quelqu'un qui n'a jamais testé ces lecteurs. En effet, il va de soi que les aveugles n'ont jamais testé les lecteurs d'écran et sont les moins à même d'en parler. :-P
P.S : ceci étant dit, je n'ai pas réussi à trouver le communiqué en ligne sur leur site, bien que plusieurs journaux en parlent.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Un générateur d'onde sinusoïdale, dans le domaine audio, c'est proche d'un "Hello World!". ;-)
Après on peut jouer sur la fréquence ("Hello @hpiedcoq!") ou même la forme du signal ("@hpiedcoq, les sinusoïdes c'est la base du traitement du signal ;-)"). :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Si la phrase 'par la méthode de condorcet' fait partie de la discussion, on voit bien dans l'original anglais que c'est mentionné
Comme tu le soulignes, la référence à la méthode de scrutin à la Condorcet est mentionnée sur l'original chez Debian (fait qui est notoirement connu pour quiconque connaît un minimum le fonctionnement de l'organisation Debian).
Dans un commentaire de mon journal, je précise que la mention à cette méthode était un clin d'œil à certains journaux de l'époque (on était en pleine campagne présidentielle, et certains journaux parlaient de méthodes de votes alternatives). L'introduction même du journal est une allusion au contexte historique et aux débats de l'époque sur le site.
Dans un commentaire d'un de ces journaux, en date du 15 mai, je parle de Condorcet et Borda et de mon intérêt pour ces méthodes qui remonte au moins à l'élection de 2002 et le second tour Chirac - Le Pen.
Dans la dépêche, je développe cette partie sur les modes de scrutins avec lien vers un dossier sur le site Images des Maths du CNRS.
Je pense qu'il se peut fort bien que les deux soient de bonne foi
J'ai du mal à comprendre où l'on peut voir, de bonne foi, dans mon article (et sa version promue en dépêche) une contrefaçon du sien.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Pas du tout, à des souvenirs traumatisants du professeur qui ponctuait ses corrections par des références à l'évidence même sans réel explication.
Au temps pour moi, avec le sujet de la dépêche, j'ai du me sentir visé : dans l'autre journal j'avais fait un appel à l'évidence et tu m'avais répondu que même si cela paraissait évident, il fallait démontrer que la solution proposée apportait quelque chose.
Pour ce qui est de l'appel à l'évidence, dans l'enseignement, c'est toujours délicat : l'évidence est très subjective (ce qui est évident pour l'un, ne l'est pas forcément pour l'autre) et dans une correction, ce n'est pas le meilleur endroit pour y faire appel.
Ceci étant, même Coq a une notion d'évidence avec la tactique trivial :
Remarka:foralln,0+n=n+0.Proof.trivial.Qed.
mais en réalité, il trouve cela trivial car il applique directement un théorème qui est dans sa base de données (et qui énonce la même chose). En revanche, la preuve du théorème initial n'est pas triviale pour la machine, il faut la faire à la main par récurrence; là où avec un interlocuteur humain, un mathématicien serait tenté d'écrire : évident par récurrence sur n (en précisant toutefois le mode de démonstration à utiliser).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
C'est vrai que les justifications du type mais c'est évident ! ressemble fort à un prof de maths qui ne souhaite pas expliquer la solution en détails. :-)
Hé ! ce ne serait pas une allusion déguisée à certains de nos échanges récents sur un autre journal. :-P
Je ne suis pas prof de maths, et ce à quoi je faisais allusion c'est ce genre de chose :
extrait du livre ACSL by example (où ACSL signifie ANSI/ISO C Specification Langage). Il me semble évident que le système de type défini par ACSL est plus riche et permet de mieux exprimer la spécification de la fonction que ne le fait celui du langage C, qui dit juste que la fonction renvoie un booléen (ce que fait également la fonction qui renvoie constamment true). Qu'il existe un logiciel qui vérifie automatiquement que le code satisfait cette spécification, c'est un fait, il suffit de le tester.
Mais restons dans le sujet de la dépêche : la contrefaçon. Kant (oui, encore lui) a écrit un article sur le sujet en 1785 : De l'illégitimité de la contrefaçon des livres, article à la lecture fort intéressante et d'actualité, comme l'illustre la première note qui rappelle furieusement le problème des DRM :
Si un éditeur essayait de soumettre quiconque voudrait acheter son édition à la condition de se voir poursuivi pour soustraction d’un bien étranger à lui confié, dans le cas où, soit par son propre fait, soit par l’effet de sa négligence, l’exemplaire qu’il aurait acheté aurait été livré à l’impression, on n’y consentirait pas volontiers, car on ne voudrait pas s’exposer à toutes les importunités des perquisitions et des justifications. L’édition resterait donc sur les bras de l’éditeur.
Le texte est aussi une illustration de la rigueur, tant logique que juridique, avec laquelle Kant pouvait faire usage de la syllogistique.
Il reprendra, en 1797, le même thème dans sa Doctrine du droit dans un annexe aux droits des contrats sous le titre Qu'est-ce qu'un livre ?
La cause de ce qu'il y a d'apparamenent légitime dans une illégitimité qui saute pourtant aussi vivement aux yeux, du premier coup d'œil, que celle de la contrefaçon des livres, tient à ceci : le livre,d'une part, est un produit matériel de l'art (opus mechanicum) qui peut être imité (par celui qui se trouve en posséder légitimement un exemplaire, et par conséquent il y a là un droit réel; mais, d'un autre côté, le livre est aussi un pur et simple discours de l'éditeur au public, que le possesseur n'a pas le droit de reproduire publiquement (praestatio operae) sans avoir pour cela été mandaté par l'auteur — ce qui définit un droit personnel, et dans ces conditions l'erreur consiste en ce que l'on confond les deux droits.
Kant, Doctrine du Droit.
Sans entrée dans le détails, le droit des contrats relève du droit personnel (droit de contraindre une personne à une certaine prestation) et le genre d'annotations de code comme illustré ci-dessus est ce que l'on appelle la programmation par contrat. Elles expriment quelque chose du type : si les entrées vérifient certaines conditions alors la sortie en vérifiera d'autres. Il se trouve que Kant a donné pour fondements aux droits personnels la forme logique des jugements hypothétiques (si A alors B), tandis que les droits réels (droit de propriété sur une chose) ont pour fondements la forme logique des jugements catégoriques (A est B), ce qui correspond à la relation de sous-typage (comme je l'ai expliqué ailleurs).
Autrement dit, les débats sur la légitimité ou l'illégitimité de la contrefaçon tourne autour de la confusions entre la relation de sous-typage et le type d'une fonction.
En espérant que ce cas d'école illustrera ce que je voulais exprimer lorsque j'ai écrit un jour : ce que font les théories des types contemporaines, Kant le faisait déjà il y a plus de 200 ans. ;-)
Pour le détail, il faut se référer au contenu des théories concernées. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Oui j'étais au courant, j'ai eu des échanges téléphoniques et par mails avec Benoît. En revanche je ne suis pas dans la procédure, il semble que je ne suis pas juridiquement impliqué dans l'affaire (bien que d'un point de vue moral, je le sois indubitablement). J'ai envoyé des éléments de défense pour nier la qualification de contrefaçon tant de l'article que de la dépêche.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Petit résumé et tests dans la réalité
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 2. Dernière modification le 23 décembre 2017 à 00:27.
faut lancer le script en direct via le shebang
#!/usr/bin/python3
, sinon :;-)
Le calcul en décimal est performant (c'est assez normal), mais son usage me semble toujours bien limité pour en faire le comportement par défaut. Il ferait mieux d'ajouter une syntaxe particulière de littéraux pour eux, que d'en faire la solution par défaut et de rajouter des testes dynamiques pour savoir s'il faut changer de représentation (ce qui dégraderait encore plus les performances).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Petit résumé et tests dans la réalité
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 3.
Ça dépend du point de vue, pour moi le débat a régressé. Il n'était nul besoin de sortir perl ou python pour constater les résultats : les tests montrent juste ce que la théorie permettait déjà de savoir, et encore, avec des tests on ne prouve jamais autant de chose qu'avec une théorie bien faite (mais bon, malheureusement, il semblait falloir en passer par là pour te raisonner).
Ça me rappelle un ancien journal de rewind dans laquelle l'approche théorique avait été dénigrée, voire présentée comme inutile, par plus d'un intervenant. Je cite à nouveau le passage d'un ouvrage que j'avais cité à l'époque :
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 2. Dernière modification le 22 décembre 2017 à 17:21.
Je ne vois pas où ils ont changé un type de base, ils ont juste changé la signature d'une fonction. Avant on avait :
maintenant on a :
C'est juste le type de sortie d'une fonction qui a changé, non la représentation en mémoire d'un type de base. C'est un léger changement d'interface et de sémantique pour une fonction, avec une autre fonction existante (
//
) ayant le même comportement que l'ancienne, pas de quoi fouetter un chat ni jouer à l'équilibriste en haut d'un immeuble de 42 étages par vent de force 5. ;-)Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 2.
Non, juste redéfinir une fonction sur un type de base. Je n'appelle pas cela changer tout le langage. ;-)
Pour la question de l'absence de typage statique, c'est loin d'être le seul défaut de python.
Pour rester sur la question de la rigueur mathématique, de toute façon, pour moi, dès qu'on sort de la programmation fonctionnelle avec typage statique, on n'est déjà plus très rigoureux (je tolère à la rigueur les effets de bords et le code impure, c'est-à-dire les valeurs mutables, mais au-delà de ça, on est trop loin de la conception mathématique du calcul).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 4.
Dès que l'on quitte les opérations algébriques de base (addition, multiplication, soustraction) et qu'on en vient aux fonctions transcendantes1 (
sinus, cosinus, logarithme, exponentielle
…, voir le commentaire de Michaël). Si tu reprends l'article de Guido sur les raisons du changements pour la division sur lesint
:Pour dessiner une horloge analogique, il faut faire de la trigonométrie et donc utilise les
float
. ;-)même avec les nombres algébriques (racines de polynômes à coefficients entiers) cela devient vite injouable de calculer exactement et de les comparer. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 5.
C'est même pire que ce que tu crois, il faudrait changer également l'inteprétation des littéraux.
Je t'explique pas les problèmes de retro-compatibilité s'il fallait les interpréter par des décimaux :
il faudrait rajouter des
float(...)
partout dans le code existant :Ils n'ont pas déjà assez de problèmes avec le passage
python 2.7
verspython 3
?Si tu veux des décimaux et gérer manuellement tes arrondis (et des problèmes d'arrondis, tu en auras), il y a un module pour cela :
decimal
. Si tu veux du calcul exact sur des fractions (sans problèmes d'arrondis avec les opérations algébriques), tu as un module pour cela :fractions
. Sinon par défaut, comme dans tous les langages, tu te retrouves avec des nombres à virgule flottante ce qui n'est pas sans raison.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 7.
Eh bien ce que tu souhaites exactement (par défaut) est profondément ridicule. Quitte à choisir une représentation pour avoir de l'exactitude dans les calculs et perdre du temps (inutile dans la quasi totalité des applications), autant choisir celles des fractions : avec les décimaux tu n'as même pas la structure de corps (c'est pas « stable » par division comme type de données).
Et je t'ai répondu que ce n'est pas ce qu'il fait ! Il a juste changer la sémantique de l'opérateur
/
et son type de sortie. Avant/
calculait le quotient euclidien et était de typeint * int -> int
, maintenant il calcule le résultat de la division en flottant et est de typeint * int -> float
. C'est juste un changement de sémantique (l'opérateur//
étant là pour la division euclidienne) et non une adaptation au besoin de précision. Si vraiment, ils avaient voulu cela (ou s'ils le voulaient) il faudrait choisir le typeFraction
en sortie et non le typeDecimal
.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Ca marche aussi... Mais j'ai triché
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 2.
C'est sûr que c'est pas très lisible pour un CM2. :-P
L'écriture est lié au système de typage statique OCaml qui n'a pas de mécanisme à la type classes de Haskell. Du coup
2
est toujours interpréter comme étant de typeint
et~$
est juste une notation infixe pour la fonctionof_int
.L'idée était surtout de montrer qu'il n'y avait aucune difficulté à faire du calcul formel sur les rationnels, avec pour seul limite la capacité mémoire de la machine (python le fait aussi) : c'est juste coûteux en mémoire et plus long en calcul, mais inutile dans la plupart des applications (d'où le recours aux flottants par défaut dans tous les langages).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 5. Dernière modification le 20 décembre 2017 à 12:31.
C'est pas tout à fait cela, il a changé la sémantique d'un de ces opérateurs sur les
int
, à savoir l'opérateur/
, qui avant calculait le quotient euclidien et qui maintenant calcule la division dans le typefloat
(ce qui ne change pas les problèmes d'arrondis et l'impossibilité d'avoir une représentation finie en base 2 pour certaines fractions).Si tu veux calculer formellement sur des fractions en python, il faut utiliser le module fractions.
Pour avoir un jour un tel comportement par défaut, j'en doute : les besoins en calcul formel sur ce type de nombres sont trop rares (application de niche) pour en faire le comportement par défaut.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Ca marche aussi... Mais j'ai triché
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 3. Dernière modification le 20 décembre 2017 à 00:05.
Avec Zarith et la précision arbitraire sur les entiers et les rationnels, on résout le problème du journal :
mais aussi celui d'un de tes anciens journaux ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 2.
Oui, je l'ai trouvé après le pretty-printer. Je l'ai mis dans cet autre commentaire et celui-ci. C'est plus joli avec. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Ca marche aussi... Mais j'ai triché
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 3.
mais les rationnels, eux, forment un corps :
:-)
et pour ceux qui aiment les grandes puissances :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 6.
Il écrit des nombres décimaux, ce sont des valeurs tout a fait acceptables dont on n'a pas besoin d'indiquer la précision (sinon on indique un intervalle).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Rien de surprenant
Posté par kantien . En réponse au journal [Humour] vers un monde différent. Évalué à 1.
Mauvais système de calcul formel ⇒ changer système de calcul formel :
Zarith :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: sans changer l'heure
Posté par kantien . En réponse au journal Que fait `man` passé minuit ?. Évalué à 3. Dernière modification le 30 novembre 2017 à 19:31.
D'autant que si on n'a pas déjà installé
faketime
, c'est plus long. Je ne sais pas comment fonctionne tous les systèmes, mais sur le mien ça ne fout pas le bordel. Si je n'enchaîne pas les deux commandes via le;
, mais l'une après l'autre, l'heure est déjà revenue à la normale.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: 00:01 ?
Posté par kantien . En réponse au journal Que fait `man` passé minuit ?. Évalué à 9.
Exact, il a du le modifier entre temps. Dans la version que j'ai c'est bien à minuit et demi. Voir le commit qui le retire.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Aigreur, quand tu nous tiens
Posté par kantien . En réponse au journal ils l'ont voulu, ils l'ont obtenu, et ils l'ont dans le baba.... Évalué à 6. Dernière modification le 24 novembre 2017 à 19:22.
Itou. :-) De mémoire c'était surtout en CM1 et CM2 que l'on pratiquait ce genre d'analyse.
On avait également vu les règles de division par 3 ou 9 pour des nombres en base 10 avec compréhension de leur principe. Pour savoir si 54 est divisible par 3 (sans chercher dans ses tables ou effectuer la divison), il suffit de faire
5 + 4 = 9
et de constater que 9 est divisible par 3 donc 54 aussi. Le principe est simple quand on a compris le fonctionnement des bases : 54 c'est 5 paquets de dix et un paquet de 4. Or quand on divise un paquet de dix en trois personnes, chacun en a trois et il nous en reste un sur les bras. Donc avec cinq paquets, il nous en reste cinq sur les bras, plus les quatre unités cela fait neuf unités, que l'on peut alors répartir en trois par personnes.Je me servais de ce genre de principe dans la cours quand on faisait du « plouf, plouf, amstramgram » pour choisir les membres de son équipe de foot : je savais par qui commencer pour avoir celui que je voulais, sans rien laisser au hasard. Les joies de l'arithmétique modulaire. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Aigreur, quand tu nous tiens
Posté par kantien . En réponse au journal ils l'ont voulu, ils l'ont obtenu, et ils l'ont dans le baba.... Évalué à 3. Dernière modification le 23 novembre 2017 à 11:44.
Il y a du y avoir des changements, avec les époques, sur ce qui était enseigné tant aux élèves qu'aux enseignants. Si je prends mon expérience personnelle : dans les années 80, à la sortie de mon primaire on nous avait appris le changement de base (essentiellement la conversion base 10 vers base 5, mais des fois aussi base 2 ou 3). Lorsque j'étais étudiant, je donnais des cours particuliers pour financer mes études : certains de mes élèves de terminale (en terminale S) galéraient pour la conversion base 10 vers base 5. Et pour la formation de mes institutrices : la plupart avaient fait l'école normale sans être bachelières. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Écriture
Posté par kantien . En réponse à la dépêche Quad9, résolveur DNS public, et sécurisé par TLS. Évalué à 5. Dernière modification le 21 novembre 2017 à 12:42.
D'après l'article d'Europe1, le communiqué de la Fédération des Aveugles de France contiendrait ce passage : « Pour nous personnes aveugles, cette soi-disant langue inclusive est proprement indéchiffrable par nos lecteurs d'écrans ». Je m'inscris totalement en faux contre cet argument en vertu du principe, déjà invoqué, suivant : « c'est pas compatible avec les lecteurs d'écran pour malvoyants » est un argument faux, émis par quelqu'un qui n'a jamais testé ces lecteurs. En effet, il va de soi que les aveugles n'ont jamais testé les lecteurs d'écran et sont les moins à même d'en parler. :-P
P.S : ceci étant dit, je n'ai pas réussi à trouver le communiqué en ligne sur leur site, bien que plusieurs journaux en parlent.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Hello world!
Posté par kantien . En réponse à la dépêche [Faust] Coder de l’audio en sifflotant. Évalué à 7.
Un générateur d'onde sinusoïdale, dans le domaine audio, c'est proche d'un "Hello World!". ;-)
Après on peut jouer sur la fréquence ("Hello @hpiedcoq!") ou même la forme du signal ("@hpiedcoq, les sinusoïdes c'est la base du traitement du signal ;-)"). :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: [HS] C'est lisible pour quelqu'un?
Posté par kantien . En réponse au journal Quad9, résolveur DNS public, et sécurisé par TLS. Évalué à 2.
Ça se discute, tout dépend à qui se réfère l'adjectif épithète. Ces trois phrases me semblent correctes, mais n'expriment pas la même chose :
dans la première, seule Marie Curie est qualifiée de brillante.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: 90 mots
Posté par kantien . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 10. Dernière modification le 14 novembre 2017 à 21:47.
Comme tu le soulignes, la référence à la méthode de scrutin à la Condorcet est mentionnée sur l'original chez Debian (fait qui est notoirement connu pour quiconque connaît un minimum le fonctionnement de l'organisation Debian).
Dans un commentaire de mon journal, je précise que la mention à cette méthode était un clin d'œil à certains journaux de l'époque (on était en pleine campagne présidentielle, et certains journaux parlaient de méthodes de votes alternatives). L'introduction même du journal est une allusion au contexte historique et aux débats de l'époque sur le site.
Dans un commentaire d'un de ces journaux, en date du 15 mai, je parle de Condorcet et Borda et de mon intérêt pour ces méthodes qui remonte au moins à l'élection de 2002 et le second tour Chirac - Le Pen.
Dans la dépêche, je développe cette partie sur les modes de scrutins avec lien vers un dossier sur le site Images des Maths du CNRS.
J'ai du mal à comprendre où l'on peut voir, de bonne foi, dans mon article (et sa version promue en dépêche) une contrefaçon du sien.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: l'assignation ne va jamais venir
Posté par kantien . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 4.
Au temps pour moi, avec le sujet de la dépêche, j'ai du me sentir visé : dans l'autre journal j'avais fait un appel à l'évidence et tu m'avais répondu que même si cela paraissait évident, il fallait démontrer que la solution proposée apportait quelque chose.
Pour ce qui est de l'appel à l'évidence, dans l'enseignement, c'est toujours délicat : l'évidence est très subjective (ce qui est évident pour l'un, ne l'est pas forcément pour l'autre) et dans une correction, ce n'est pas le meilleur endroit pour y faire appel.
Ceci étant, même Coq a une notion d'évidence avec la tactique
trivial
:mais en réalité, il trouve cela trivial car il applique directement un théorème qui est dans sa base de données (et qui énonce la même chose). En revanche, la preuve du théorème initial n'est pas triviale pour la machine, il faut la faire à la main par récurrence; là où avec un interlocuteur humain, un mathématicien serait tenté d'écrire : évident par récurrence sur
n
(en précisant toutefois le mode de démonstration à utiliser).Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: l'assignation ne va jamais venir
Posté par kantien . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 6.
Hé ! ce ne serait pas une allusion déguisée à certains de nos échanges récents sur un autre journal. :-P
Je ne suis pas prof de maths, et ce à quoi je faisais allusion c'est ce genre de chose :
extrait du livre ACSL by example (où ACSL signifie ANSI/ISO C Specification Langage). Il me semble évident que le système de type défini par ACSL est plus riche et permet de mieux exprimer la spécification de la fonction que ne le fait celui du langage C, qui dit juste que la fonction renvoie un booléen (ce que fait également la fonction qui renvoie constamment
true
). Qu'il existe un logiciel qui vérifie automatiquement que le code satisfait cette spécification, c'est un fait, il suffit de le tester.Mais restons dans le sujet de la dépêche : la contrefaçon. Kant (oui, encore lui) a écrit un article sur le sujet en 1785 : De l'illégitimité de la contrefaçon des livres, article à la lecture fort intéressante et d'actualité, comme l'illustre la première note qui rappelle furieusement le problème des DRM :
Le texte est aussi une illustration de la rigueur, tant logique que juridique, avec laquelle Kant pouvait faire usage de la syllogistique.
Il reprendra, en 1797, le même thème dans sa Doctrine du droit dans un annexe aux droits des contrats sous le titre Qu'est-ce qu'un livre ?
Sans entrée dans le détails, le droit des contrats relève du droit personnel (droit de contraindre une personne à une certaine prestation) et le genre d'annotations de code comme illustré ci-dessus est ce que l'on appelle la programmation par contrat. Elles expriment quelque chose du type : si les entrées vérifient certaines conditions alors la sortie en vérifiera d'autres. Il se trouve que Kant a donné pour fondements aux droits personnels la forme logique des jugements hypothétiques (si A alors B), tandis que les droits réels (droit de propriété sur une chose) ont pour fondements la forme logique des jugements catégoriques (A est B), ce qui correspond à la relation de sous-typage (comme je l'ai expliqué ailleurs).
Autrement dit, les débats sur la légitimité ou l'illégitimité de la contrefaçon tourne autour de la confusions entre la relation de sous-typage et le type d'une fonction.
En espérant que ce cas d'école illustrera ce que je voulais exprimer lorsque j'ai écrit un jour : ce que font les théories des types contemporaines, Kant le faisait déjà il y a plus de 200 ans. ;-)
Pour le détail, il faut se référer au contenu des théories concernées. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Le plus malin est en général le premier qui cède
Posté par kantien . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 10.
Oui j'étais au courant, j'ai eu des échanges téléphoniques et par mails avec Benoît. En revanche je ne suis pas dans la procédure, il semble que je ne suis pas juridiquement impliqué dans l'affaire (bien que d'un point de vue moral, je le sois indubitablement). J'ai envoyé des éléments de défense pour nier la qualification de contrefaçon tant de l'article que de la dépêche.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.