Oui mais pas au même tarif si je me souviens bien
Les mêmes caractéristiques coûtaient très cher sur PC si tu voulais approcher le niveau de l'Amiga
C'est clair, en 1987 un Amiga 500+ coûtait 700 USD, avec 1 Mo de RAM, un lecteur de disquette 3 1/2, une puce motorola cadencée à plus de 7 Mhz, qui était capable de protéger les tâches, et flanqué d'une unité graphique rapide et programmable et d'une unité sonore descente. En comparaison, le Tandy 3000 HL coûtait environ 1500 USD (la numérisation de la pub est pas terrible, mais je crois arriver à bien lire!) avec une puce 286 (qui est incapable de protéger les tâches, ce qui n'est arrivé qu'avec le 386) pas d'unité sonore, une unité graphique bien inférieure à celle de l'Amiga et un lecteur 5 1/4… :) Si on ajoute la complexité de l'utilisation de MS-DOS en comparaison au Work-Bench de l'Amiga, la comparaison est douloureuse.
C'est vrai mais les inconvénients à mentionner est que les ressources nécessaires vont être plus importantes et qu'il faut probablement de surcroit utiliser un reverse proxy (comme haproxy par exemple) pour connecter les serveurs apache à l'hôte. Dans le cas décrit (avec 3 utilisateurs) c'est certainement une très bonne solution et il n'est pas très difficile de configurer haproxy pour ce cas de figure. Il faut cependant noter que cela ne se redimensionne pas très bien.
Mais de toutes façons on sort du CE2 et des soustractions (sujet du journal, vous divergez).
En fait ce qui rendrait la discussion potentiellement intéressante ce serait que tu prennes un peu de hauteur et essaie d'organiser les changements qu'il serait nécessaire de faire pour que Python puisse sortir le résultat attendu du calcul de CE2 dont tu parles puis peser les avantages et les inconvénients de ces changements. Ce serait très intéressant et il y a plein de points très différents à aborder, comme par exemple les modifications à faire dans la syntaxe du langage, dans la représentation mémoire des objets, dans l'écriture de bindings avec le C++ (un des points forts de Python est de faciliter au maximum cette écriture). Il pourrait il y avoir plein d'échanges fructueux, de problèmes à résoudre, une discussion stimulante. Mais tout ce qui tu nous donnes c'est du “vous n'êtes pas de mon avis, mon avis est bon, donc vous êtes…” Quel dommage!
Je te parle exactitude, tu me réponds affichage. C'est pénible.
Pour la machine un nombre flottant est un nombre entier fois une puissance de deux et si on veut afficher cela en base 10 il faut déterminer les chiffres à afficher… ce qui se fait avec une certaine précision!
Je reviens à ce que je dis : s'il-te-plait, donne moi un avantage du float par rapport au Decimal mis à part la perfo.
Je l'ai déjà écrit ailleurs mais apparemment cela mérite d'être répété: en calcul scientifique on ne sait en général que faire du calcul approché, et la plupart des nombres ne sont pas décimaux, ni même rationnels, on ne travaille qu'avec des nombres qui ne sont pas représentables exactement dans la machine (sauf si on se contente de leur donner un nom, mais, sans surprise, on ne sait pas faire grand chose de ce nom). Du point de vue strictement spéculatif, puisqu'on peut représenter un flottant par un décimal et les utiliser dans les calculs mais ce faisant on ne va pas très loin. Par exemple dans une simulation de type LIBOR Market Model pour simuler la “zero curve” pour les 25 prochaines années on va faire un calcul du type u[i][0] = donné initiale pour i et u[i][j+1] = whatever * exp(whatever* u[i][j] + whatever) + whatever où les divers whatever désignent tous des expressions distinctes. Quelle taille τ(x) peut bien avoir un nombre décimal x sortant d'un tel système? Mettons qu'on calcule l'exponentielle en sommant les N = 20 premiers termes de la série (ce qui est une très mauvaise façon de calculer l'exponentielle loin de zéro!), on a (Sterling) τ(n!) ∼ n log(n) et τ(xn) ∼ n τ(x) du coup vite fait τ(exp x) ∼ N (log(N) + τ(x)) / 2 et quand j'utilise plus de 9000 itérations (au moins un point par jour pour les 25 prochaines années) de la formule avec les whatever on se retrouve avec un terme dominant τ(final) en N log9000 (N) et en se souvenant qu'un gigabit c'est à peine 29 octets, on voit qu'on aurait le mal plus fou à ne stocker qu'un résultat de ces itérations… mais on veut en calculer des centaines de milliers! Si on peut tout faire tenir sur 64 bits, c'est pas plus mal!
Donc pour récapituler: les nombres rationnels en machine permettent de faire de l'arithmétique exacte, mais sont lents et prennent beaucoup de place et on ne peut rien calculer d'autre que des fractions rationnelles, tandis que les floats ne savent rien calculer exactement mais sont rapides et petits.
Il existe des systèmes qui peuvent utiliser indifféremment les floats et les rationnels, comme par exemple Common Lisp (depuis au moins 1984!), Maple, etc. mais ils ne sont pas faciles à manier – ce qui est précisément l'inverse du but que tu sembles poursuivre.
Tout ça pour calculer une somme de 3 termes du CE2. Et quand je dis "tiens on pourrait utiliser un autre type que float pour représenter les litéraux par exemple" on me demande "mais pourquoi faire".
On pourrait mais ce n'est pas le choix qui a été fait par la plupart des langages, mais au lieu d'argumenter réellement en cherchant à faire une liste des avantages et des inconvénients que pourrait introduire ce changement, par exemple Python, tu te bornes à dire “regardez les floats ne marchent pas comme l'arithmétique exacte” – ce qui est loin d'être une nouveauté – et à jouer les incompris – ce qui est pénible.
Par ailleurs l'égalité est fausse. ce qui est vrai, c'est (2.0 +/-e) - (1.8 +/-e) - (0.2 +/-e) == (0.0 (+/-4*e))
Ce n'est pas la bonne égalité, en notant φ(x) = μ(x) 2τ(x) (avec 0<= μ(x) < 1) le flottant représentant la représentation de x en virgule flottante ce qui est garanti c'est que |φ(x) - x | <= ε 2τ(x) donc du coup (en tenant compte du fait que 2 est bien représenté!) on a plutôt un truc du genre
4(0.5) - 2(0.9 +/- ε) - (0.2 +/- ε)
pour aller plus loin dans l'estimation il faudrait considérer l'arbre effectivement utilisé pour faire le calcul!
Sûrement. Dis-moi c'est dans les anneaux ou les corps que tu justifies ce comportement actuel ?
Le comportement que tu pointes n'a rien à voir avec les structures algébriques, c'est encore une manifestation du fait que Python utilises des nombres en virgule flottante pour effectuer ce calcul que tu lui demandes. Vérifier l'égalité de deux nombres en virgule flottante n'est presque jamais la bonne chose à faire et à la place on étudie la taille de la différence, soit en unité absolues soit, plus communément en unités relatives.
Tout cela est expliqué dans le livre de Knuth (Art of Computer Programming) et certainement dans beaucoup d'autres sources.
De la tartine de posts je déduis donc qu'on peut rajouter :
c'est très bien comme ça, on voit pas pourquoi ça devrait changer
Si tu penses qu'il serait plus judicieux que Python utilise de l'arithmétique exacte tant qu'il le peut pour effectuer les calculs, c'est certainement un point de vue défendable, mais je ne vois pas dans tes commentaires ce qui ressemblerait à un effort pour construire un argumentaire là-dessus et à comparer avec les avantages et les inconvénients d'un changement par rapport au status quo.
On a de temps en temps des discussions ici sur le calcul en virgule flottante et les désagrément qu'il peut causer à ceux qui en découvrent les limitations, mais on ne parle presque jamais de ce à quoi sert le calcul en virgule flottante… c'est-à-dire de la raison pour laquelle on a développé cet outil! Réparons cet oubli.
Quand on calcule, disons avec des nombres réels, il y a très peu de nombres que l'on sait représenter et très peu d'opérations que l'on sait mener exactement. Les nombres que l'on sait bien représenter sont les nombres rationnels (avec un numérateur et un dénominateur pas trop gros) et les opérations que l'on sait bien mener sont l'addition, la soustraction, la multiplication, la division et la comparaison.
Si on veut faire exactement ces cinq opérations les nombres rationnels sont le plus grand sous-ensemble (sous-anneau pour être précis) des nombres réels qui marche. Si par exemple j'ajoute un nombre irrationnel comme la racine carrée de 2 par exemple, le calcul symbolique exact reste possible mais la comparaison devient un problème difficile: d'une part il devient coûteux en temps et en espace de déterminer si un nombre est plus grand qu'un autre et tester l'égalité devient aussi un problème – et si on fait abstraction de quelques cas faciles, ces problèmes sont largement irrésolus si on veut travailler avec plusieurs irrationnels simultanément. Ainsi, pour calculer exactement, si on s'en tient aux opérations arithmétique de base, il faut utiliser les nombres rationnels.
Mais les opérations arithmétiques de base ne recoupent pas tout ce qu'on fait en calcul scientifique.
Par exemple la fonction exponentielle, et partant la fonction logarithme et toutes les fonctions trigonométriques prennent des valeur irrationnelles aux point rationnels de la droite réelle (à quelques exceptions notoires, comme exp 0 = 1). Ainsi par exemple exp 2 n'est pas rationnel, comment calculer avec ce nombre? Il y a deux approches, et seulement deux car on ne sait pas faire grand chose d'autre: soit on calcule de façon symbolique soit en prenant une valeur approchée. Le calcul symbolique ne marche que dans les cas les plus simples, si je construis deux expression complexes avec des nombres entiers et des nombres irrationnels obtenus par divers moyens, on ne peut pas les comparer facilement par exemple, et toutes les opérations plus complexes sont impraticables. Le calcul d'une valeur approchée lui est parfois possible. (Mais pas toujours: parfois on sait démontrer l'existence d'un nombre sans que cela en fournisse une méthode de calcul approché, en mathématiques il y a aussi des “constantes universelles”.)
Mais l'exponentielle n'est qu'un exemple! Il existe beaucoup d'autres fonctions classiques comme les fonctions de Bessel, les fonctions gamma d'Euler, par exemple, dont on ne sait pas calculer les valeurs exactement. Si on pratique le calcul intégral, qu'on travaille avec des limites de suites ou de séries, qu'on recherche les zéros d'une fonction, ou encore qu'on recherche la solution d'une équation différentielle, on se retrouve avec autant d'exemples où le calcul symbolique (et a fortiori le calcul sur les nombres rationnels) est impossible à utiliser. C'est précisément à ce genre de calculs que servent les nombres en virgule flottante, et fournissent une très bonne solution: puisque par nature le calcul exact n'est pas possible, autant privilégier la vitesse de calcul. De plus le calcul en virgule flottante donne un cadre où l'on peut utiliser diverses techniques pour maîtriser l'erreur commise – c'est bien-sûr un sujet de recherche en soi! Un exemple simple de ces techniques est la méthode de sommation de Kahan. Pour résumer, le problème de physique les plus complexe qu'on sache résoudre exactement avec les moyens de l'arithmétique exacte est celui de la chute d'un corps soumis à une force (son poids) et pour tout le reste on doit utiliser des techniques de calcul approché. En pratique on utilise une approche mixte: c'est très difficile de construire une bonne approximation pour une fonction arbitraire, donc en pratique on utilise le calcul symbolique pour essayer de construire une méthode de calcul qui tire parti de calculs numériques bien compris!
Pour en revenir à la découverte du journal:
>>>2-1.8-0.2-5.551115123125783e-1
C'est la démonstration que Python n'utilise pas l'arithmétique exacte pour mener ce calcul et si ce n'est pas le comportement escompté il faut se documenter et rechercher la méthode appropriée!
B. Il n'y a pas d'impact performances critiques. En effet un calcul en décimal n'est rien d'autre qu'un calcul avec des entiers en prenant pour convention un placement de la virgule dans la représentation des nombres.
De temps en temps il y a quand-même un petit calcul de PGCD à faire et les calculs sur les grands entiers ne peuvent se faire sur les registres de la machine, donc il y a des va et viens constants entre les registres et la mémoire: le résultat est une pénalité de performance loin d'être négligeable – même si elle peut être parfaitement acceptable!
Non mais je connais le truc, j'ai fait un IUT informatique, du IEEE-machin j'en ai bouffé. Mais 20 ans après… rien n'a changé, y compris dans un langage qui n'existait pas à l'époque[1]. On voit des chats qui tombent des chaises en fullHD sur Youtube, mais on fait toujours pas une soustraction de nombre difficilement représentables en binaire.
Les nombres en virgule flottante servent à faire du calcul scientifique, si on veut faire de l'arithmétique exacte il faut utiliser une autre structure de données.
Par nature le calcul scientifique est un calcul approché parcequ'on passe son temps à calculer des quantités qu'on ne sait pas calculer de façon exacte, à commencer par les valeurs de la fonction exponentielle ou les racines.
Choisir les structures de données adaptées au problème qu'il veut résoudre – et plus généralement les langages et outils – fait partie des compétences et du métier de programmeur et j'ai bien du mal à comprendre ce qui déplaît?
Il y a des langages qui privilégient l'arithmétique exacte sur le calcul en virgule flottante tant que c'est possible (Common Lisp) mais ce n'est un choix raisonnable que si le langage permet d'une manière ou d'une autre d'insister pour que tel ou tel calcul soit bel et bien exécuté en virgule flottante et beaucoup de langages n'ont pas fait ce choix.
Je parle de Qwant, (flemme de faire une capture t'as juste à tester pour constater).
faut pas se braquer! Et si tu faisais l'effort de lire la page en question tu lirais:
Because HTTPS piggybacks HTTP entirely on top of TLS, the entirety of the underlying HTTP protocol can be encrypted. This includes the request URL (which particular web page was requested), query parameters, headers, and cookies (which often contain identity information about the user).
C'est vrai, et le fait que FB pousse le développement de Hack (PHP 7) devrait mettre la pluce à l'oreille…
Là où je travaille (en fait c'était mon dernier jour aujourd;hui, youpi) – c'est pas très gros mais on a déjà plein de clients, on a 1847297 lignes de PHP – mais pas que ;)
Oui mais grâce à l'écriture inclusive avec point milieux on peut tirer sa couette sur son nez et s'endormir en étant persuadé qu'on a œuvré à l'amélioration de la condition des femmes par quelques tweets ou stories facebook, et ça c'est un progrès considérable.
En allemand il y a un genre neutre mais ce n'est pas le genre a priori des objets, par exemple der Tod, la mort, est masculin, das Leben, la vie est neutre, et die Liebe, l'amour est féminin (en français amour n'a d'ailleurs pas de genre bien arrêté, ce que je trouve très juste et très beau). En général l'assignation d'un genre à un mot ne se fait pas selon une règle générale, même s'il y a bien sûr quelques catégories importantes comme tous les individus animés et pas encore sexuellement matures sont neutre, ou les mots formés avec un diminutifs sont neutre. Une autre catégorie importante sont les genres des substantifs dérivés des verbes, où il y a un motif général: ziehen (tirer, traîner, etc.) donne der Zug (le train), die Ziehung (l'attraction, la force de tractation), das Ziehen (le tirage, le fait de tirer).
C'est intéressant qu'en pratique la différence entre genres et nombres (le pluriel ne distingue ni masculin ni féminin dans l'accord, seulement parfois dans la formation des pluriels des noms) peut se partager en deux groupes, avec d'une part le masculin et le neutre qui sont souvent pareil et d'autre part le féminin et le pluriel qui sont souvent pareils (qui portent la même marque d'accord).
Je ne possède aucun bitcoin mais pour taquiner mes collègues, riches de 0.2 à 2.4 bitcoins, j'ai mis un bitcoin ticker dans le prompt du shell. C'est bien, faisez tous comme moi!
➜ jscl git:(explore/react) ✗ bitcoin_ticker_install
[EUR 14005.31] ➜ jscl git:(explore/react) ✗
[EUR 14005.31] ➜ jscl git:(explore/react) ✗ git status
On branch explore/react
Your branch is ahead of 'origin/explore/react' by 3 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: react.html
modified: react/example-2.lisp
modified: react/react.lisp
Untracked files:
(use "git add <file>..." to include in what will be committed)
FFI.md
HACKING.pdf
HACKING.tex
babel-example.js
lfreact/
react/example-1.js
react/example-2.js
no changes added to commit (use "git add" and/or "git commit -a")
[EUR 13969.59] ➜ jscl git:(explore/react) ✗ git add react.html react/react.lisp
[EUR 14530.99] ➜ jscl git:(explore/react) ✗ git commit --fixup=0f6b7b5
[explore/react eaf1779] fixup! Work on the definition of CREATE-CLASS
2 files changed, 27 insertions(+), 20 deletions(-)
[EUR 13969.59] ➜ jscl git:(explore/react) ✗
[EUR 13855.45] ➜ jscl git:(explore/react) ✗
L'inconvénient est que si blockchain.info commence à retourner des exploits… etc.
Le virement est uniquement compliqué à suivre parce que les banques ne font aucun effort pour faire autrement.
C'est on ne peut plus vrai. J'habite en Allemagne et on fait tout par virement. Si je paie une facture par virement, je me connecte sur le site de ma banque, dans le formulaire adéquat je saisis l'IBAN, le montant et la référence de mon virement, et voilà: en 4 minutes, c'est réglé.
(Les bazouins papier ça marche aussi, mais c'est un peu rétro, non?)
Sinon, y'a des chances que ce soit le genre de service qui soit populaire avec des cartes volées. Du coup le système de detection de fraude peut bloquer par défaut.
Sans trancher le sujet on peut laisser ouverte la question de savoir si c'est une bonne chose, en revanche ce dont je suis sûr c'est qu'une banque qui opère ce genre de filtrages a intérêt à avoir une service clientèle qui assure le steackos derrière, ce qui n'est visiblement pas le cas – pour rester poli.
"Curiosité" révélatrice (?) ; si je tape dans la barre de recherche du Menu Mint : "Apache", puis "Mysql-server", il ne me trouve rien.
Démarrer ces services se fait habituellement par la ligne de commande. Ces logiciels sont complexes et ont besoin d'être configurés avant de les démarrer… c'est un sujet en soi!
Remarque pertinente de Michaël, même si je n'ai pas compris tout ce qu'il voulais dire…
Pour développer avec PHP l'interpréteur (le programme /usr/local/bin/php) peut aussi faire office de serveur web. ad hoc c'est du lateing: “Ad hoc est une locution latine qui signifie « pour cela ». Elle s'emploie de nos jours pour « qui a été institué spécialement pour répondre à un besoin.” – tandis que haddock, c'est du poisson! Ici il faut comprendre que le serveur est destiné à être utilisé pour le développement, il permet de commencer à travailler sans se pencher sur la configuration d'un serveur de qualité industrielle comme Apache.
Pour un débutant en PHP ne serait-il pas plus judicieux d'utiliser le serveur ad-hoc livré avec l'interpréteur au lieu de s'occuper de la configuration d'un serveur web? Du style php -S 127.0.0.1:80 -t mon-dossier-de-developpement ?
C'est une bonne question, et moi qui n'ai pas une grande expérience de ce type de contrats, je me demande quelles genre de clauses on trouve pour se protéger de consultants complètements incompétents. (Le plus simple est peut-être d'essayer de parler à leurs anciens clients?)
Il faut importer les bons modules avant. Au delà d'être lourdingue, cela oblige à bien connaître les fonctions de la doc.
Oui bref, c'est un peu longuet et tout par rapport au shell, mais l'avantage c'est qu'on a un vrai langage de programmation (but recherché). Si la concision est vraiment importante on peut se poser la question d'écrire un PPX – ce qui est a priori bien plus simple que d'écrire un langage complet!
Dans un sens dans Gufo, j'ai deux langages qui s'imbriquent: un langage fonctionnel basique qui peut contenir un sous-langage de commande (qui vise a imiter bash). C'est aussi une façon d'aider le nouveau venu: il peut au début utiliser la partie commande et découvrir au fur et à mesure le langage au dessus.
Je comprends bien, mais il ne faut pas perdre de vue qu'il y a une longue histoire de remplacements au shell qui sont tous de façon tout à fait défendable mieux que le shell de Bourne (le /bin/sh historique) mais en pratique ils restent d'utilisation relativement marginale et presque uniquement pour l'usage interactif. La seule explication que j'y trouve est le problème du déploiement que j'évoque dans le commentaire auquel tu réponds: les solutions les plus faciles sont soit d'utiliser ce qui est déjà là soit d'utiliser un langage plus complet qu'on connaît bien et qui permet de programmer concisément, comme par exemple OCaml, Common Lisp, Python, Perl, Ruby, TCL, ou autre…
Je sens qu'a ce moment on va me dire, "oui donc pourquoi c'est mieux que bash", moi, je vais répondre parce que:
À mon avis ce n'est pas du tout la question qui se pose, je pense que tout le monde sera d'accord pour dire que Gufo est mieux que bash, puisque bash est assez limité comme langage de programmation: encore une fois le problème c'est le choix d'une solution par un programmeur qui veut décrire un traitement sur une machine: si je connais bien Bourne et perl disons, qu'est-ce qui me pousserait à apprendre et installer gufo au lieu de soit utiliser Bourne qui est déjà là soit si mon programme est plus complexe, installer perl et toutes les libraries dont j'ai besoin pour programmer ma solution?
2) bash ne dispose pas de vrai fonction (je crois que toute les variables sont globales ou des choses comme ça).
C'est inexact, il y a deux mécanismes qui permettent de limiter la portée des variables: le mot clef local et l'exécution d'un sous-shell.
[^] # Re: On va enfin
Posté par Michaël (site web personnel) . En réponse à la dépêche Deux failles critiques : Meltdown et Spectre. Évalué à 10.
C'est clair, en 1987 un Amiga 500+ coûtait 700 USD, avec 1 Mo de RAM, un lecteur de disquette 3 1/2, une puce motorola cadencée à plus de 7 Mhz, qui était capable de protéger les tâches, et flanqué d'une unité graphique rapide et programmable et d'une unité sonore descente. En comparaison, le Tandy 3000 HL coûtait environ 1500 USD (la numérisation de la pub est pas terrible, mais je crois arriver à bien lire!) avec une puce 286 (qui est incapable de protéger les tâches, ce qui n'est arrivé qu'avec le 386) pas d'unité sonore, une unité graphique bien inférieure à celle de l'Amiga et un lecteur 5 1/4… :) Si on ajoute la complexité de l'utilisation de MS-DOS en comparaison au Work-Bench de l'Amiga, la comparaison est douloureuse.
[^] # Re: container ?
Posté par Michaël (site web personnel) . En réponse au message Sécurité user avec php. Évalué à 3.
C'est vrai mais les inconvénients à mentionner est que les ressources nécessaires vont être plus importantes et qu'il faut probablement de surcroit utiliser un reverse proxy (comme haproxy par exemple) pour connecter les serveurs apache à l'hôte. Dans le cas décrit (avec 3 utilisateurs) c'est certainement une très bonne solution et il n'est pas très difficile de configurer haproxy pour ce cas de figure. Il faut cependant noter que cela ne se redimensionne pas très bien.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 6.
En fait ce qui rendrait la discussion potentiellement intéressante ce serait que tu prennes un peu de hauteur et essaie d'organiser les changements qu'il serait nécessaire de faire pour que Python puisse sortir le résultat attendu du calcul de CE2 dont tu parles puis peser les avantages et les inconvénients de ces changements. Ce serait très intéressant et il y a plein de points très différents à aborder, comme par exemple les modifications à faire dans la syntaxe du langage, dans la représentation mémoire des objets, dans l'écriture de bindings avec le C++ (un des points forts de Python est de faciliter au maximum cette écriture). Il pourrait il y avoir plein d'échanges fructueux, de problèmes à résoudre, une discussion stimulante. Mais tout ce qui tu nous donnes c'est du “vous n'êtes pas de mon avis, mon avis est bon, donc vous êtes…” Quel dommage!
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 5.
Pour la machine un nombre flottant est un nombre entier fois une puissance de deux et si on veut afficher cela en base 10 il faut déterminer les chiffres à afficher… ce qui se fait avec une certaine précision!
Je l'ai déjà écrit ailleurs mais apparemment cela mérite d'être répété: en calcul scientifique on ne sait en général que faire du calcul approché, et la plupart des nombres ne sont pas décimaux, ni même rationnels, on ne travaille qu'avec des nombres qui ne sont pas représentables exactement dans la machine (sauf si on se contente de leur donner un nom, mais, sans surprise, on ne sait pas faire grand chose de ce nom). Du point de vue strictement spéculatif, puisqu'on peut représenter un flottant par un décimal et les utiliser dans les calculs mais ce faisant on ne va pas très loin. Par exemple dans une simulation de type LIBOR Market Model pour simuler la “zero curve” pour les 25 prochaines années on va faire un calcul du type
u[i][0] = donné initiale pour i
etu[i][j+1] = whatever * exp(whatever* u[i][j] + whatever) + whatever
où les divers whatever désignent tous des expressions distinctes. Quelle taille τ(x) peut bien avoir un nombre décimal x sortant d'un tel système? Mettons qu'on calcule l'exponentielle en sommant les N = 20 premiers termes de la série (ce qui est une très mauvaise façon de calculer l'exponentielle loin de zéro!), on a (Sterling) τ(n!) ∼ n log(n) et τ(xn) ∼ n τ(x) du coup vite fait τ(exp x) ∼ N (log(N) + τ(x)) / 2 et quand j'utilise plus de 9000 itérations (au moins un point par jour pour les 25 prochaines années) de la formule avec les whatever on se retrouve avec un terme dominant τ(final) en N log9000 (N) et en se souvenant qu'un gigabit c'est à peine 29 octets, on voit qu'on aurait le mal plus fou à ne stocker qu'un résultat de ces itérations… mais on veut en calculer des centaines de milliers! Si on peut tout faire tenir sur 64 bits, c'est pas plus mal!Donc pour récapituler: les nombres rationnels en machine permettent de faire de l'arithmétique exacte, mais sont lents et prennent beaucoup de place et on ne peut rien calculer d'autre que des fractions rationnelles, tandis que les floats ne savent rien calculer exactement mais sont rapides et petits.
Il existe des systèmes qui peuvent utiliser indifféremment les floats et les rationnels, comme par exemple Common Lisp (depuis au moins 1984!), Maple, etc. mais ils ne sont pas faciles à manier – ce qui est précisément l'inverse du but que tu sembles poursuivre.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 7.
On pourrait mais ce n'est pas le choix qui a été fait par la plupart des langages, mais au lieu d'argumenter réellement en cherchant à faire une liste des avantages et des inconvénients que pourrait introduire ce changement, par exemple Python, tu te bornes à dire “regardez les floats ne marchent pas comme l'arithmétique exacte” – ce qui est loin d'être une nouveauté – et à jouer les incompris – ce qui est pénible.
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 2.
Ce n'est pas la bonne égalité, en notant φ(x) = μ(x) 2τ(x) (avec 0<= μ(x) < 1) le flottant représentant la représentation de x en virgule flottante ce qui est garanti c'est que |φ(x) - x | <= ε 2τ(x) donc du coup (en tenant compte du fait que 2 est bien représenté!) on a plutôt un truc du genre
4(0.5) - 2(0.9 +/- ε) - (0.2 +/- ε)
pour aller plus loin dans l'estimation il faudrait considérer l'arbre effectivement utilisé pour faire le calcul!
[^] # Re: Puisque tout le monde est sûr de détenir la vérité...
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 7.
Le comportement que tu pointes n'a rien à voir avec les structures algébriques, c'est encore une manifestation du fait que Python utilises des nombres en virgule flottante pour effectuer ce calcul que tu lui demandes. Vérifier l'égalité de deux nombres en virgule flottante n'est presque jamais la bonne chose à faire et à la place on étudie la taille de la différence, soit en unité absolues soit, plus communément en unités relatives.
Tout cela est expliqué dans le livre de Knuth (Art of Computer Programming) et certainement dans beaucoup d'autres sources.
[^] # Re: Pourquoi calculer en virgule flottante?
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 7.
Si tu penses qu'il serait plus judicieux que Python utilise de l'arithmétique exacte tant qu'il le peut pour effectuer les calculs, c'est certainement un point de vue défendable, mais je ne vois pas dans tes commentaires ce qui ressemblerait à un effort pour construire un argumentaire là-dessus et à comparer avec les avantages et les inconvénients d'un changement par rapport au status quo.
# Pourquoi calculer en virgule flottante?
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 10. Dernière modification le 21 décembre 2017 à 11:36.
On a de temps en temps des discussions ici sur le calcul en virgule flottante et les désagrément qu'il peut causer à ceux qui en découvrent les limitations, mais on ne parle presque jamais de ce à quoi sert le calcul en virgule flottante… c'est-à-dire de la raison pour laquelle on a développé cet outil! Réparons cet oubli.
Quand on calcule, disons avec des nombres réels, il y a très peu de nombres que l'on sait représenter et très peu d'opérations que l'on sait mener exactement. Les nombres que l'on sait bien représenter sont les nombres rationnels (avec un numérateur et un dénominateur pas trop gros) et les opérations que l'on sait bien mener sont l'addition, la soustraction, la multiplication, la division et la comparaison.
Si on veut faire exactement ces cinq opérations les nombres rationnels sont le plus grand sous-ensemble (sous-anneau pour être précis) des nombres réels qui marche. Si par exemple j'ajoute un nombre irrationnel comme la racine carrée de 2 par exemple, le calcul symbolique exact reste possible mais la comparaison devient un problème difficile: d'une part il devient coûteux en temps et en espace de déterminer si un nombre est plus grand qu'un autre et tester l'égalité devient aussi un problème – et si on fait abstraction de quelques cas faciles, ces problèmes sont largement irrésolus si on veut travailler avec plusieurs irrationnels simultanément. Ainsi, pour calculer exactement, si on s'en tient aux opérations arithmétique de base, il faut utiliser les nombres rationnels.
Mais les opérations arithmétiques de base ne recoupent pas tout ce qu'on fait en calcul scientifique.
Par exemple la fonction exponentielle, et partant la fonction logarithme et toutes les fonctions trigonométriques prennent des valeur irrationnelles aux point rationnels de la droite réelle (à quelques exceptions notoires, comme exp 0 = 1). Ainsi par exemple exp 2 n'est pas rationnel, comment calculer avec ce nombre? Il y a deux approches, et seulement deux car on ne sait pas faire grand chose d'autre: soit on calcule de façon symbolique soit en prenant une valeur approchée. Le calcul symbolique ne marche que dans les cas les plus simples, si je construis deux expression complexes avec des nombres entiers et des nombres irrationnels obtenus par divers moyens, on ne peut pas les comparer facilement par exemple, et toutes les opérations plus complexes sont impraticables. Le calcul d'une valeur approchée lui est parfois possible. (Mais pas toujours: parfois on sait démontrer l'existence d'un nombre sans que cela en fournisse une méthode de calcul approché, en mathématiques il y a aussi des “constantes universelles”.)
Mais l'exponentielle n'est qu'un exemple! Il existe beaucoup d'autres fonctions classiques comme les fonctions de Bessel, les fonctions gamma d'Euler, par exemple, dont on ne sait pas calculer les valeurs exactement. Si on pratique le calcul intégral, qu'on travaille avec des limites de suites ou de séries, qu'on recherche les zéros d'une fonction, ou encore qu'on recherche la solution d'une équation différentielle, on se retrouve avec autant d'exemples où le calcul symbolique (et a fortiori le calcul sur les nombres rationnels) est impossible à utiliser. C'est précisément à ce genre de calculs que servent les nombres en virgule flottante, et fournissent une très bonne solution: puisque par nature le calcul exact n'est pas possible, autant privilégier la vitesse de calcul. De plus le calcul en virgule flottante donne un cadre où l'on peut utiliser diverses techniques pour maîtriser l'erreur commise – c'est bien-sûr un sujet de recherche en soi! Un exemple simple de ces techniques est la méthode de sommation de Kahan. Pour résumer, le problème de physique les plus complexe qu'on sache résoudre exactement avec les moyens de l'arithmétique exacte est celui de la chute d'un corps soumis à une force (son poids) et pour tout le reste on doit utiliser des techniques de calcul approché. En pratique on utilise une approche mixte: c'est très difficile de construire une bonne approximation pour une fonction arbitraire, donc en pratique on utilise le calcul symbolique pour essayer de construire une méthode de calcul qui tire parti de calculs numériques bien compris!
Pour en revenir à la découverte du journal:
C'est la démonstration que Python n'utilise pas l'arithmétique exacte pour mener ce calcul et si ce n'est pas le comportement escompté il faut se documenter et rechercher la méthode appropriée!
[^] # Re: Back to the sixties
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 3.
De temps en temps il y a quand-même un petit calcul de PGCD à faire et les calculs sur les grands entiers ne peuvent se faire sur les registres de la machine, donc il y a des va et viens constants entre les registres et la mémoire: le résultat est une pénalité de performance loin d'être négligeable – même si elle peut être parfaitement acceptable!
[^] # Re: Ca marche aussi... Mais j'ai triché
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 3.
“On obtient alors le nombre inscrit sur ce carton, qui laisse derrière lui un bon paquet…” dans *Le Professeur Rollin a toujours quelque chose à dire!” :D
[^] # Re: Rien de surprenant
Posté par Michaël (site web personnel) . En réponse au journal [Humour] vers un monde différent. Évalué à 5.
Les nombres en virgule flottante servent à faire du calcul scientifique, si on veut faire de l'arithmétique exacte il faut utiliser une autre structure de données.
Par nature le calcul scientifique est un calcul approché parcequ'on passe son temps à calculer des quantités qu'on ne sait pas calculer de façon exacte, à commencer par les valeurs de la fonction exponentielle ou les racines.
Choisir les structures de données adaptées au problème qu'il veut résoudre – et plus généralement les langages et outils – fait partie des compétences et du métier de programmeur et j'ai bien du mal à comprendre ce qui déplaît?
Il y a des langages qui privilégient l'arithmétique exacte sur le calcul en virgule flottante tant que c'est possible (Common Lisp) mais ce n'est un choix raisonnable que si le langage permet d'une manière ou d'une autre d'insister pour que tel ou tel calcul soit bel et bien exécuté en virgule flottante et beaucoup de langages n'ont pas fait ce choix.
[^] # Re: HTTPS
Posté par Michaël (site web personnel) . En réponse au message Requête en clair dans url du moteur de recherche ... Évalué à 10.
Il te taquine sur ton
faut pas se braquer! Et si tu faisais l'effort de lire la page en question tu lirais:
Le graissage est de moi!
[^] # Re: stderr
Posté par Michaël (site web personnel) . En réponse au message Créer deux fichiers avec un seul grep. Évalué à 5.
En fait awk sait même écrire dans des fichiers, par exemple voici comment obtenir la sortie dans deux fichiers
output.a
etoutput.b
:Au passage l'extrait illustre le passage de paramètres à awk ce qu'on peut utiliser pour choisir les noms de fichiers depuis la procédure appelante.
(Cela marche avec awk sans tirer parti d'aucune extension, ce que je souligne pour la portabilité!)
[^] # Re: Sérieux
Posté par Michaël (site web personnel) . En réponse à la dépêche Dernière ligne droite pour l’appel à conférencier·e du PHPTour 2018. Évalué à 3.
C'est vrai, et le fait que FB pousse le développement de Hack (PHP 7) devrait mettre la pluce à l'oreille…
Là où je travaille (en fait c'était mon dernier jour aujourd;hui, youpi) – c'est pas très gros mais on a déjà plein de clients, on a 1847297 lignes de PHP – mais pas que ;)
[^] # Re: déroutant
Posté par Michaël (site web personnel) . En réponse au journal L’écriture neutre. Évalué à 10.
Oui mais grâce à l'écriture inclusive avec point milieux on peut tirer sa couette sur son nez et s'endormir en étant persuadé qu'on a œuvré à l'amélioration de la condition des femmes par quelques tweets ou stories facebook, et ça c'est un progrès considérable.
[^] # Re: tout a fait
Posté par Michaël (site web personnel) . En réponse au journal L’écriture neutre. Évalué à 4. Dernière modification le 13 décembre 2017 à 16:01.
En allemand il y a un genre neutre mais ce n'est pas le genre a priori des objets, par exemple der Tod, la mort, est masculin, das Leben, la vie est neutre, et die Liebe, l'amour est féminin (en français amour n'a d'ailleurs pas de genre bien arrêté, ce que je trouve très juste et très beau). En général l'assignation d'un genre à un mot ne se fait pas selon une règle générale, même s'il y a bien sûr quelques catégories importantes comme tous les individus animés et pas encore sexuellement matures sont neutre, ou les mots formés avec un diminutifs sont neutre. Une autre catégorie importante sont les genres des substantifs dérivés des verbes, où il y a un motif général: ziehen (tirer, traîner, etc.) donne der Zug (le train), die Ziehung (l'attraction, la force de tractation), das Ziehen (le tirage, le fait de tirer).
C'est intéressant qu'en pratique la différence entre genres et nombres (le pluriel ne distingue ni masculin ni féminin dans l'accord, seulement parfois dans la formation des pluriels des noms) peut se partager en deux groupes, avec d'une part le masculin et le neutre qui sont souvent pareil et d'autre part le féminin et le pluriel qui sont souvent pareils (qui portent la même marque d'accord).
# Bitcoin ticker dans le prompt du shell
Posté par Michaël (site web personnel) . En réponse au journal Conséquences sociales des cryptomonnaies - 2. Évalué à 5. Dernière modification le 13 décembre 2017 à 08:37.
Je ne possède aucun bitcoin mais pour taquiner mes collègues, riches de 0.2 à 2.4 bitcoins, j'ai mis un bitcoin ticker dans le prompt du shell. C'est bien, faisez tous comme moi!
Et le voilà en action (ZSH):
L'inconvénient est que si blockchain.info commence à retourner des exploits… etc.
[^] # Re: western
Posté par Michaël (site web personnel) . En réponse au journal La Banque Postale bloque l'achat d'un VPN. Évalué à 3.
C'est on ne peut plus vrai. J'habite en Allemagne et on fait tout par virement. Si je paie une facture par virement, je me connecte sur le site de ma banque, dans le formulaire adéquat je saisis l'IBAN, le montant et la référence de mon virement, et voilà: en 4 minutes, c'est réglé.
(Les bazouins papier ça marche aussi, mais c'est un peu rétro, non?)
[^] # Re: Et au final ?
Posté par Michaël (site web personnel) . En réponse au journal Optimisez votre code !. Évalué à 2.
Top, merci!
[^] # Re: visa / mastercard / autre?
Posté par Michaël (site web personnel) . En réponse au journal La Banque Postale bloque l'achat d'un VPN. Évalué à 4.
Sans trancher le sujet on peut laisser ouverte la question de savoir si c'est une bonne chose, en revanche ce dont je suis sûr c'est qu'une banque qui opère ce genre de filtrages a intérêt à avoir une service clientèle qui assure le steackos derrière, ce qui n'est visiblement pas le cas – pour rester poli.
[^] # Re: phpMyAdmin sous Linuxmint 18.2 Sonya
Posté par Michaël (site web personnel) . En réponse au message PhP sous Linuxmint 18.2 Sonya. Évalué à 2.
Démarrer ces services se fait habituellement par la ligne de commande. Ces logiciels sont complexes et ont besoin d'être configurés avant de les démarrer… c'est un sujet en soi!
Pour développer avec PHP l'interpréteur (le programme
/usr/local/bin/php
) peut aussi faire office de serveur web. ad hoc c'est du lateing: “Ad hoc est une locution latine qui signifie « pour cela ». Elle s'emploie de nos jours pour « qui a été institué spécialement pour répondre à un besoin.” – tandis que haddock, c'est du poisson! Ici il faut comprendre que le serveur est destiné à être utilisé pour le développement, il permet de commencer à travailler sans se pencher sur la configuration d'un serveur de qualité industrielle comme Apache.[^] # Re: Précisions
Posté par Michaël (site web personnel) . En réponse au message PhP sous Linuxmint 18.2 Sonya. Évalué à 5.
Pour un débutant en PHP ne serait-il pas plus judicieux d'utiliser le serveur ad-hoc livré avec l'interpréteur au lieu de s'occuper de la configuration d'un serveur web? Du style
php -S 127.0.0.1:80 -t mon-dossier-de-developpement
?[^] # Re: Et au final ?
Posté par Michaël (site web personnel) . En réponse au journal Optimisez votre code !. Évalué à 6.
C'est une bonne question, et moi qui n'ai pas une grande expérience de ce type de contrats, je me demande quelles genre de clauses on trouve pour se protéger de consultants complètements incompétents. (Le plus simple est peut-être d'essayer de parler à leurs anciens clients?)
[^] # Re: Rashell
Posté par Michaël (site web personnel) . En réponse au journal Gufo: un langage de shell moderne!. Évalué à 4.
Oui bref, c'est un peu longuet et tout par rapport au shell, mais l'avantage c'est qu'on a un vrai langage de programmation (but recherché). Si la concision est vraiment importante on peut se poser la question d'écrire un PPX – ce qui est a priori bien plus simple que d'écrire un langage complet!
Je comprends bien, mais il ne faut pas perdre de vue qu'il y a une longue histoire de remplacements au shell qui sont tous de façon tout à fait défendable mieux que le shell de Bourne (le /bin/sh historique) mais en pratique ils restent d'utilisation relativement marginale et presque uniquement pour l'usage interactif. La seule explication que j'y trouve est le problème du déploiement que j'évoque dans le commentaire auquel tu réponds: les solutions les plus faciles sont soit d'utiliser ce qui est déjà là soit d'utiliser un langage plus complet qu'on connaît bien et qui permet de programmer concisément, comme par exemple OCaml, Common Lisp, Python, Perl, Ruby, TCL, ou autre…
À mon avis ce n'est pas du tout la question qui se pose, je pense que tout le monde sera d'accord pour dire que Gufo est mieux que bash, puisque bash est assez limité comme langage de programmation: encore une fois le problème c'est le choix d'une solution par un programmeur qui veut décrire un traitement sur une machine: si je connais bien Bourne et perl disons, qu'est-ce qui me pousserait à apprendre et installer gufo au lieu de soit utiliser Bourne qui est déjà là soit si mon programme est plus complexe, installer perl et toutes les libraries dont j'ai besoin pour programmer ma solution?
C'est inexact, il y a deux mécanismes qui permettent de limiter la portée des variables: le mot clef
local
et l'exécution d'un sous-shell.