Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 09-11-2016 13:40:49

Fred
Administrateur
Inscription : 26-09-2005
Messages : 7 035

Une vraie bizarrerie

Salut tout le monde,

  Voici un calcul très simple : 10^16-221349167*45177491
Exécuté sur mon téléphone, sur la calculatrice de Google, ou sur LibreOffice, le résultat est 0.
Exécuté sur l'iphone de mon collègue (ou sur son ipad), le résultat est 4.
Exécuté sur la calculatrice de Ubuntu, le résultat est 3.

Si un des résultats est correct, ce ne peut être (évidemment) que le dernier. Mais ces trois résultats différents (et notamment le 4 notamment) sont étonnants, n'est-ce pas???

F.

Hors ligne

#2 09-11-2016 14:18:37

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Une vraie bizarrerie

Salut,

sur ma HP 12C, j'ai 0 ;
exécuté sur R, j'ai 4 ;
Sur Mathematica, j'ai 3 :-)
Conclusion : be carefull, guy, be very carefull !

Dernière modification par freddy (09-11-2016 14:19:17)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#3 09-11-2016 14:23:30

Yassine
Membre
Inscription : 09-04-2013
Messages : 1 090

Re : Une vraie bizarrerie

Python donne 3


L'ennui dans ce monde c'est que les idiots sont sûrs d'eux et les gens sensés pleins de doutes. B. Russel

Hors ligne

#4 09-11-2016 14:44:27

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 944

Re : Une vraie bizarrerie

Ave,

Et avec des nombres entiers, avantage Python !!!
221349167*45177491 = 9999999999999997
Allez, hop à vos outils :
[tex]1437^{2016}+1[/tex]
A part Python, qui donne le résultat ?
(Extrait d'un exo de kadaide, où ce calcul était superflu...)

@+


Arx Tarpeia Capitoli proxima...

En ligne

#5 09-11-2016 21:18:42

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Une vraie bizarrerie

Avec mathematica :

270922178166235145964633517498087278995387984711062976413674527844325361343078
932050942457954550298366423423460895693607910805194968262562199217338006654353
145301983865214292561318467057674094246054614400448573839640622122817623236366
913406197733122740889390541416927454238741843034015157804385052902803500892951
535744586297359564829021959978407337809877087625484453873760591317912884523103
840161833331547823548501840619709459004172289404097519585461264828825502401480
219813263562146861482025209806678377168843420864306525996938825156360548528541
677392909659850863946975173273351182193450584122543600708429293437470436012356
005896935869956256846011938044195736040787394870546708049509672978553008616743
605548122396477865040922676804658992815570083059693807979345285400310067943401
744425823600178178000160120023130024068578489821578195481136119368302931970458
280333465443573892716989326479685533846930442763921409011745362256534994566122
135720324748004800787433706082349851252304702772255974614035535846020648374051
508299414479003457523086071321913466764902301114702009547879626833562489934495
069051648990695114578821232515571962065572614435133674397664603300974887789736
508359316483030676445270502437700268928350624225662845550318089622814547924166
977850812850158696284530300143822376820629512010868484513980327676237366898122
085474676660061520835848472291455811603801268961771847233917014500022282216904
552031805598211183899882759785339857920058716287785278528829425549553001542014
607870394936113968409801644685281842617840733945305272959674489300492180956467
072080187264822049197988706894563695509127376492848784520304269872552370826140
721323063859244362845676398002836765244491379621432888705425009076998011899857
715031384069871543848889032905534658675295343017707717233996678388812749924381
324465301795858151592992905658755111015995986510991193057438928399155410024959
612183476192852336459730836377704477877724319303174015439829613868672654758195
775934516940438310169270102423103112525358135556579784581809553609552793733564
539066016589810322825839456658206907632504881091342797903052054640363472263267
100877321851766045859187938831036038407498289392469245984948804410483971131316
381427862749664049524709213734396992505040278255854807805787329016895137357514
920648883241056249877437424921518462732406841139050889867914213290186965716300
590473172297893622584657433994275769087591123199692006784045692372715110768977
147911459434889031150590000853216555052483331788713522334515330533512746176828
735340203967950125539374334534405233696567119019229717217917948558724165841713
119967697135908967981953135843127700851319503390607820304565723491156603204362
603607861339536635629612722867563433222212371886202070194021138795629752187531
052508244727409583347204645222352591507274371699849487898693640013309891412209
565785679266024694946088595352859207839430373054971013110378159317468230865390
183541673339161005661727992779262127349718854785480315099289878569680465586611
298985978839427827270478668512816138282404591571041622950132154518390879762379
975619293415677893419640338343407459108190942106964695844961880834340908299160
538981850204354717488877856475627011304097693047471086953724363116077152119659
562668710868387966038585493884582088323923974342859008029760763417330222295721
539108621312910143248449257087224477350246054550034876008493388014585818490549
770304659115459253721031044285891116476734048604306755474358752696575218690979
206371029262244673725648148417308032787525973773140445290308033746553980607406
033742835118241556910708133934000537604851444306825605717954201578508157340106
955858742874350946930204255236983371380344496655455075912797365673785685240239
419052563474279430739038412109357342828301681896265266412336508632353088082886
123440813002220670478564910429928184059376360865352115249957775192425498486788
697129904492199667932710454430521779916673992400914961660992537377142959915362
929064351288984534282793450179620256858689286328068242870652457043671835549253
494288733579673998231918299011314042507318061594380987664583636404070971157973
646959396924329676934054442273320934120246632157187047435429282744695325729585
274677533756817260589243575874236441286914681706211176753469647646354301246778
306553111033247105641357956049120373433749229782593995509906656527339743552207
129404876313914616589424573134162522269090263827398017193293655797071237502142
973069343312614832900085793646791127480195274021187933068113390579306688184129
665409472066280020475980752631879291887513794155558334832687415851997026243847
111830465598697891563263767567657276460196785150070655886803086845058091039330
055032444944907264438252382927877837446234415083848825538369863719047450130928
028025904401608059544837638845760080193272334787693494915204691000736661058040
695622581759114134862474556851081836835151906993748597165905557010320771089807
199815152374644525395335117284413454297574860146410792578834112300107981272206
267078245949837589860647911239175013590253403793159409351162850927694016394639
489669014272577976197387129530755230889801881844877081038223649739007607535383
037430502939082881440690595072778408886885463230763851848616210884144402486007
020822234313269197368334566775825172821494063023803099811730774104928175488106
665020525087746630714417724131223467576761657454976366018684541315581463534409
552373404098548924260959755935757040753974261455212527641691317269250903213986
222686043963260318273547823156911183989653909560496780640058257920612768397890
570436846012398799571503651573175356458259349750944201667236528171055737053650
662793873450927117864396021193322978643722009620275175688580727446464862667603
672864724197964863692837498993290835347086088952661468784812358715282601842878
238575010334375948209836600755087565081925906299012832970537034676509363303888
359026237834683378650832737468643835355123235635003563621194833791539544128035
930531032962187660149181116843864054757779508269059988231948016987689696382443
195910704111800923750986225451884761184043709171874075006511225061843847240825
525113771872495480304352045869156834374932396972282093620368923000348958217608
015230505411992709853683080308562153443753875357445724738020551388374682305050
833395640978216418728967927917542337621490216379870081298891509523542209335218
395725017236430149236213779477237159069980760567009565642970811344755513147691
939740417454688943834456607282071400830663597442


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#6 09-11-2016 21:31:35

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 944

Re : Une vraie bizarrerie

Re,

Ok ! Parfait...
Je présume qu'il s'agit du soft, pas de (Wolfram) Mathematica ou c'est kif-kif ?
En combien de temps ?

@+


Arx Tarpeia Capitoli proxima...

En ligne

#7 09-11-2016 22:45:11

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Une vraie bizarrerie

@yoshi,

C'est le soft, quasi immédiatement ! Wolfram Alpha donne un résultat  avec un nombre de chiffres réduit, et impossible de faire le copier-coller que j'ai fait avec le soft.

C'est avec le même soft que j'ai répondu à une question de yassine sur les 10 dernières décimales des puissances empilées de 2à 9. Mais là, j'ai dû développer une stratégie assez sioux !


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#8 09-11-2016 22:51:49

Fred
Administrateur
Inscription : 26-09-2005
Messages : 7 035

Re : Une vraie bizarrerie

Re,

  Je reviens à mon problème. Ce qui a de plus étonnant dans l'histoire, ce n'est pas de trouver 0 (ça, c'est facile à comprendre, le calcul est souvent implémenté sur 12 ou 14 chiffres significatifs, et quand on introduit 10^16, on oublie ce qui se passe pour les unités), c'est que l'on puisse trouver 4.
L'article dont est issu l'exemple est écrit en allemand, et je n'ai pas tout compris! L'erreur ne vient pas de la multiplication, mais de la façon de stocker les chiffres dans la machine. Dans un certain codage visiblement assez standard, on peut stocker $10^{16}-2$ et $10^{16}-4$, mais pas $10^{16}-3$. Si quelqu'un peut nous expliquer cela, je suis preneur!

F.

Hors ligne

#9 06-01-2017 14:24:39

PTRK
Membre
Inscription : 14-12-2016
Messages : 101

Re : Une vraie bizarrerie

@Fred : quel article ?

J'avais vu une article intéressant dans un linux mag avec un schéma assez explicatif, mais incapable de mettre le doit sur le numéro ! :/
Je suis sur qu'en lisant cette page, on aura la réponse: IEEE 754 .
L'histoire continue...-

Dernière modification par PTRK (06-01-2017 15:26:29)

Hors ligne

#10 27-05-2017 11:10:52

Judithe
Membre
Inscription : 24-05-2017
Messages : 31

Re : Une vraie bizarrerie

Bonjour.

vous êtes drôle hein.cela n'a rien d'étonnant,vous oubliez qu'en science rien n'est éxacte.tout se base sur de doute,et des valeurs approchées...la science s'évolue,en fonction de temps.qu'on trouve 0 ou 4 ou autre,ce n'est pas ça le problème des scientifiques,mais plutôt,comment on a fait pour arriver à cette valeur?et quelle lien éxiste entre ces valeurs.ce sont tous des nombres réels

Hors ligne

#11 02-06-2017 17:45:22

Rossignol
Membre
Inscription : 19-06-2015
Messages : 290

Re : Une vraie bizarrerie

Bonjour à tous,

Comme le dit PTRK c'est un problème d'arrondi des nombres flottants de la norme IEEE 754.
Dans la révision de cette norme en 2008, le comité de normalisation a ajouté une fonction "fused multiply add" (en abrégé fma) définie par fma(x, y, z) = x*y + z.

Les calculs intermédiaires se font en 128-bit (voire en 256-bit) directement par le (co)processeur.
Le résultat est arrondi à la fin en 64-bit (on a donc un seul arrondi).

J'ai testé en C sous Windows avec le compilateur MinGW-w64 (C99 inclus fma) avec ce programme :


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    double a = 1e16;
    double b = 221349167;
    double c = 45177491;

    printf("resultat 1 = %lf\n", a-b*c);
    printf("resultat 2 = %lf\n", fma(-b, c, a)); // calcule -b*c+a
    return 0;
}
 

ce qui donne  :

resultat 1 = 4.000000
resultat 2 = 3.000000

En Python, on a le même phénomène :


a = 1.0e16
b = 221349167.0;
c = 45177491.0;
print(a-b*c)      # affiche 4.0
 

Mais une fonction fma en Python est à l'étude : http://www.psf.upfronthosting.co.za/issue29282

@+

Hors ligne

Pied de page des forums