Fehler, Irrtümer, Fragen - Seite 2623

 
Vladimir Pastushak:

Ziemlich unterhaltsame Mathematik

Ergebnis

2020.01.05 17:09:28.798 Testert EURUSD,H1: 0 .06000000 0.01 6.00

Das ist eine immer wiederkehrende Frage.
Die IEEE-Norm 754 ist in aller Munde, aber wenn man Wikipedia besucht, verlässt man sie oft, ohne die Bedeutung der Norm verstanden zu haben, sei es wegen der Komplexität oder aus Faulheit.

Ich werde ein wenig Zeit darauf verwenden, diese Norm so kurz wie möglich und in einfachen Worten zu erläutern, um auf diesen Beitrag weiter hinzuweisen.


Der Typ double bestehtalso aus 8 Bytes = 64 Bits.(Float 4 Bytes = 32 Bits)

Und die Zahlendarstellung vondouble und float besteht aus 3 Komponenten:Vorzeichen, Exponent und Mantisse


DOPPEL:


FLOAT:

Natürlich gibt es in diesem Format keine dezimale Darstellung von Zahlen, sondern nur eine binäre.

  • Das Vorzeichen ist 1 Bit. Bei 0 ist es + (plus), bei 1 ist es - (minus).
  • Der Exponent speichert den Grad für die Zahl 2. Kann im Bereich von -12610 bis 12710 für Float und -1022 10 bis 102310 für Double liegen
  • Die Mantisse ist der Bruchteil der Zahl selbst in binärer Form, reduziert auf eine Form, in der das Komma nach der ersten Einheit steht, ohne Rücksicht auf diese erste Einheit und das Komma


Ein wenig Verständnis für die binäre Darstellung von Zahlen und ihre Beziehung zu Dezimalzahlen:

24= 100002 = 1610

23= 10002 = 810

22= 1002 = 4

21=102= 2

20=12=110

2-1= 0.12 =(1/2)10= 0.510

2-2= 0.012 = (1/4)10= 0.2510

2-3= 0.0012 = (1/8)10= 0.12510

2-4= 0.00012 = (1/16)10= 0.062510

2-5= 0.000012 = (1/32)10= 0.0312510

2-6= 0.0000012 = (1/64)10= 0.01562510

2-7= 0.00000012 = (1/128)10= 0.007812510

2-8= 0.000000012 = (1/256)10= 0.0039062510

2-9= 0.0000000012 = (1/512)10= 0.00195312510

2-10= 0.00000000012 = (1/1024)10= 0.000976562510

2-11= 0.000000000012 = (1/2048)10= 0.0004882812510

2-12= 0.0000000000012 = (1/4096)10= 0.00024414062510

2-13= 0.00000000000012 = (1/8192)10= 0.000122070312510

Betrachten wir Beispiele für den Typ double:

Beispiel 1

Wir haben eine Dezimalzahl: 891677.4025191

Diese Zahl kann in binärer Form dargestellt werden:

1101100110110001110101.0110011100001011010101111111111000101000001111111010001110
(wer will kann das überprüfen)))

Wir extrahieren die Mantisse der gegebenen Zahl, indem wir das Komma 19 Stellen nach links verschieben (in diesem Fall), so dass es nach der ersten Einheit kommt.

1.1011001101100011101011001110000101101111101111000101000001111101110001110* 219

Aber wir haben eine Mantisse von nur 52 Bit. Wir nehmen also die ersten 52 signifikanten Bits

Мантисса = 1011001101100011101011001110000101101111101111000101

Exponent = (19+1023)10 = 100000100102(da der Exponent eine vorzeichenbehaftete Zahl ist und der Exponent negativ sein kann (z.B. wenn wir 0,0000042132 haben), müssen wir 1023 zu10 addieren(01111111111112), 011111111112 ist Null, alles darüber hinaus ist positiv, weniger ist negativ. Mit anderen Worten: Um den umgekehrten Wert des Exponenten zu erhalten, müssen wir 1023 von dem 11-Bit-Wert des Exponenten abziehen.

Insgesamt sieht unsere Nummer 891677.4025191 indoppelterSchreibweise wie folgt aus:

0100000100101011001101100011101011001110000101101111101111000101

Da es sich aber um eine binäre Darstellung handelt, müssen wir sie genau in Dezimalzahlen umwandeln:

das wäre891677.40251909999996425211429595947265625


Beispiel #2

Wir haben eine Dezimalzahl: -0.00000145258556224114

Diese Zahl kann in binärer Form dargestellt werden:

-0.000000000000000000011000010111101100111010110111010011010101001111001110

Wir extrahieren die Mantisse dieser Zahl, indem wir das Komma einfach um 20 Stellen nach rechts verschieben, so dass es hinter der ersten Stelle steht.

1.1000010111101100111010110111010011010101001111001110 * 2-20

Мантисса = 1000010111101100111010110111010011010101001111001110

Exponent = (-20+1023)10=011111010112

Minuszeichen, also ist das erste Bit 1.

Unsere Gesamtzahl -0,00000145258556224114 wird in der doppelten Ausführung wie folgt aussehen:

1011111010111000010111101100111010110111010011010101001111001110

genau in Dezimalzahlen umrechnen:

это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875



In Ihrem Fall tritt das Problem mit der Zahl 0,01 auf, da sie im Double-Typ in der Form dargestellt wird:

0 01111111000 0100011110101110000101000111101011100001010001111011

was, umgerechnet in das Dezimalsystem, 0,0100000000000000000000208166817117216858513294309377670288085937510 entspricht

Bei der Vertretung

310 = 1.5*2 = 1.12*21

510 = 2.5*2 = 10.12*21

610 = 1.5*4 = 1.12*22

710 = 3.5*2 = 11.12*21

kein Problem.

Warum ist die doppelte Zahl 0,01 wirklich größer als 0,01?

Hier ist der Grund dafür:

0 01111111000 0100011110110101110100001010111101011101001010001111011 - 0.0100000000000000000000000020816681711721685132943093776702880859375 Fehler = 0.000 000 000 000 000 000 000 208166817...

0 0111111111000 01000111101101011100001010001111010 - 0.00999999999999999998474734433411404097569175064563751220703125 Fehler = - 0.000 000 000 000 000 000 001 5265566...

Um diesen chemischen Prozess zu verstehen, können Sie mit diesen Rechnern herumspielen:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

https://baseconvert.com/ieee-754-floating-point

 
Vladimir Pastushak:

Recht unterhaltsame Matheaufgaben

Ergebnis

2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Next lot = 0.06999999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Nächstes Lot = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Next lot = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Next lot = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Next lot = 0.069999999999999 As 0.06000000 + 0.01 wird 0.06999999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.05000000 0.01 5.00 Nächstes Lot = 0.06
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.04000000 0.01 4.00 Nächstes Lot = 0.05
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.03000000 0.01 3.00 Next lot = 0.04
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.02000000 0.01 2.00 Nächstes Lot = 0.03
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.01000000 0.01 1.00 Nächstes Lot = 0.02


Warum wird die Funktion MathFloor (gibt den nächstliegenden ganzzahligen Wert von unten zurück) für Bruchzahlen (double) verwendet?
 
Nikolai Semko:

Diese Frage wird immer wieder gestellt.

Cool! Sie schlafwandeln durch das Internet, aber können Sie die Frage beantworten, wo die letzte Iteration geblieben ist? ;) in diesem Beispiel:

void OnStart()
{
   for(double x = 10.0; x <= 20.0; x += 0.1) {
      printf("x = %10.60f", x);
      Sleep(111);
   }
}

2020.01.06 01:26:11.016 tst_double (EURUSD,H1) x = 10.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:26:11.127 tst_double (EURUSD,H1) x = 10.099999999999999996447286321199949907064437866210937500000000000

2020.01.06 01:26:11.239 tst_double (EURUSD,H1) x = 10.199999999999999289457264239899814128875732421875000000000000

2020.01.06 01:26:11.350 tst_double (EURUSD,H1) x = 10.29999999999999893434185896359849721193313598632812500000000000

2020.01.06 01:26:11.462 tst_double (EURUSD,H1) x = 10.39999999999999999985978914528479799628257751464843750000000000000

2020.01.06 01:26:11.574 tst_double (EURUSD,H1) x = 10.49999999999999998223643160599749535322189331054687500000000000

2020.01.06 01:26:11.686 tst_double (EURUSD,H1) x = 10.599999999999999978968371792719699442386627197265625000000000000

2020.01.06 01:26:11.798 tst_double (EURUSD,H1) x = 10.6999999999999999997597513100424839649349451065063476562500000000000

2020.01.06 01:26:11.910 tst_double (EURUSD,H1) x = 10.799999999999999971599971578290569595992565155029296875000000000000

2020.01.06 01:26:12.022 tst_double (EURUSD,H1) x = 10.8999999999999999699808025579079549163579940795898437500000000000

2020.01.06 01:26:12.134 tst_double (EURUSD,H1) x = 10.999999999999999644728632321199499070644378662109375000000000000

2020.01.06 01:26:12.246 tst_double (EURUSD,H1) x = 11.099999999999999960920194953319448977708816528320312500000000000

2020.01.06 01:26:12.358 tst_double (EURUSD,H1) x = 11.1999999999999999595795435567854393988847732543945312500000000000

2020.01.06 01:26:12.470 tst_double (EURUSD,H1) x = 11.2999999999999999995381472217559348791837692260742187500000000000

2020.01.06 01:26:12.582 tst_double (EURUSD,H1) x = 11.39999999999999995095026200849679298698902130126953125000000000000

2020.01.06 01:26:12.695 tst_double (EURUSD,H1) x = 11.499999999999999994670929481799248605966567993164062500000000000

2020.01.06 01:26:12.808 tst_double (EURUSD,H1) x = 11.59999999999999999994315658113919198513031005859375000000000000000

2020.01.06 01:26:12.920 tst_double (EURUSD,H1) x = 11.6999999999999999993993960386746039148420020044373725585937500000000000

2020.01.06 01:26:13.032 tst_double (EURUSD,H1) x = 11.7999999999999999993605115378151590983271598815917968975000000000000

2020.01.06 01:26:13.143 tst_double (EURUSD,H1) x = 11.89999999999999993294984401027904823422431945458007812500000000000

2020.01.06 01:26:13.254 tst_double (EURUSD,H1) x = 11.9999999999999928945726423989981412887573242187500000000000

2020.01.06 01:26:13.367 tst_double (EURUSD,H1) x = 12.0999999999999999992539301274518948048353195190429687500000000000

2020.01.06 01:26:13.478 tst_double (EURUSD,H1) x = 12.1999999999999929992184029906638897955417633056640625000000000000

2020.01.06 01:26:13.590 tst_double (EURUSD,H1) x = 12.2999999999999999182828758538758847862482070922851562500000000000

2020.01.06 01:26:13.702 tst_double (EURUSD,H1) x = 12.3999999999999999999147348717087879777795695465087890625000000000000

2020.01.06 01:26:13.813 tst_double (EURUSD,H1) x = 12.49999999999999991191118215802998747676610946655273437500000000000

2020.01.06 01:26:13.925 tst_double (EURUSD,H1) x = 12.59999999999999990762944435118697583675384521484375000000000000

2020.01.06 01:26:14.037 tst_double (EURUSD,H1) x = 12.6999999999999999090407673067238647490739822387695312500000000000

2020.01.06 01:26:14.149 tst_double (EURUSD,H1) x = 12.79999999999999990090052401699358597397804260253906250000000000000

2020.01.06 01:26:14.261 tst_double (EURUSD,H1) x = 12.89999999999999989896971303314785474730484868698120117187500000000000

2020.01.06 01:26:14.372 tst_double (EURUSD,H1) x = 12.99999999999998934341858963598497211933135986328125000000000000

2020.01.06 01:26:14.483 tst_double (EURUSD,H1) x = 13.09999999999999988988986587595718447118997573852539062500000000000

2020.01.06 01:26:14.596 tst_double (EURUSD,H1) x = 13.199999999999999886313161622783839397026062011718750000000000000000

2020.01.06 01:26:14.707 tst_double (EURUSD,H1) x = 13.2999999999999889276044859958346933126449584960937500000000000

2020.01.06 01:26:14.820 tst_double (EURUSD,H1) x = 13.3999999999999999987920773492078296840190887451171875000000000000

2020.01.06 01:26:14.932 tst_double (EURUSD,H1) x = 13.49999999999999999875502124198246747255325317382812500000000000

2020.01.06 01:26:15.044 tst_double (EURUSD,H1) x = 13.599999999999999999987281023027563181966543197631835937500000000000

2020.01.06 01:26:15.157 tst_double (EURUSD,H1) x = 13.69999999999999986854959388438146561380104249804687500000000000

2020.01.06 01:26:15.270 tst_double (EURUSD,H1) x = 13.7999999999999999986499688020558096468448638916015625000000000000

2020.01.06 01:26:15.381 tst_double (EURUSD,H1) x = 13.899999999999999869914441665267804637551303076782226562500000000000

2020.01.06 01:26:15.493 tst_double (EURUSD,H1) x = 13.999999999999999857891789145284797629982577514648437500000000000000

2020.01.06 01:26:15.604 tst_double (EURUSD,H1) x = 14.09999999999999985985433873916917946189641952514648437500000000000

2020.01.06 01:26:15.717 tst_double (EURUSD,H1) x = 14.199999999999999850878602549037896096706390380859375000000000000

2020.01.06 01:26:15.828 tst_double (EURUSD,H1) x = 14.299999999999999849723331181157846003770708282470312500000000000

2020.01.06 01:26:15.941 tst_double (EURUSD,H1) x = 14.399999999999999849999843680598132777959108352661132812500000000000

2020.01.06 01:26:16.054 tst_double (EURUSD,H1) x = 14.4999999999999849984012788445397745817899703979492187500000000000

2020.01.06 01:26:16.167 tst_double (EURUSD,H1) x = 14.599999999999999998399657517077517695724964141845703125000000000000

2020.01.06 01:26:16.280 tst_double (EURUSD,H1) x = 14.699999999999999838330224545709637645632028579711914062500000000000

2020.01.06 01:26:16.393 tst_double (EURUSD,H1) x = 14.7999999999999999982946947434175759553909301757812500000000000

2020.01.06 01:26:16.504 tst_double (EURUSD,H1) x = 14.89999999999999999899825917092973877545446157455444335937500000000000

2020.01.06 01:26:16.615 tst_double (EURUSD,H1) x = 14.999999999999982236431605997495353221893310546875000000000000

2020.01.06 01:26:16.728 tst_double (EURUSD,H1) x = 15.0999999999999999981881160238117445260286331176757812500000000000

2020.01.06 01:26:16.841 tst_double (EURUSD,H1) x = 15.19999999999999981515888258888887023739516737350769090429687500000000000

2020.01.06 01:26:16.953 tst_double (EURUSD,H1) x = 15.29999999999999999811706175023573450744152069091796897500000000000

2020.01.06 01:26:17.066 tst_double (EURUSD,H1) x = 15.399999999999999998080815346134477294981479644775390625000000000000

2020.01.06 01:26:17.179 tst_double (EURUSD,H1) x = 15.4999999999999998080460074766597244888544082641601562500000000000

2020.01.06 01:26:17.290 tst_double (EURUSD,H1) x = 15.59999999999999999801048033987171947956085205078125000000000000

2020.01.06 01:26:17.402 tst_double (EURUSD,H1) x = 15.6999999999999997979749749749532030837144702672958374023437500000000000

2020.01.06 01:26:17.514 tst_double (EURUSD,H1) x = 15.79999999999999979793942426066295709460973739396240234375000000000000

2020.01.06 01:26:17.627 tst_double (EURUSD,H1) x = 15.89999999999999999790938989295077044516801834106445312500000000000

2020.01.06 01:26:17.740 tst_double (EURUSD,H1) x = 15.9999999999999997837371792719619442386627197265625000000000000000

2020.01.06 01:26:17.851 tst_double (EURUSD,H1) x = 16.099999999999999998010480339871719479560852050507812500000000000000

2020.01.06 01:26:17.964 tst_double (EURUSD,H1) x = 16.199999999999981599815258888702373951673735076909042968750000000000000

2020.01.06 01:26:18.076 tst_double (EURUSD,H1) x = 16.29999999999999989829469474341757595539093017578125000000000000000

2020.01.06 01:26:18.189 tst_double (EURUSD,H1) x = 16.39999999999999984998499848080598132777959108352661132812500000000000

2020.01.06 01:26:18.302 tst_double (EURUSD,H1) x = 16.499999999999999998599998578917891452847979962628257751464843750000000000000000

2020.01.06 01:26:18.414 tst_double (EURUSD,H1) x = 16.5999999999999999987210230756318196654319763183593750000000000000

2020.01.06 01:26:18.526 tst_double (EURUSD,H1) x = 16.699999999999999998863131622783839702606201171875000000000000

2020.01.06 01:26:18.638 tst_double (EURUSD,H1) x = 16.79999999999999990090052401699358597397804260253906250000000000000

2020.01.06 01:26:18.750 tst_double (EURUSD,H1) x = 16.8999999999999999999147348717087879777795695465087890625000000000000

2020.01.06 01:26:18.861 tst_double (EURUSD,H1) x = 16.9999999999999928945972642398998141288757324218750000000000000

2020.01.06 01:26:18.973 tst_double (EURUSD,H1) x = 17.0999999999999999994315658113919198513031005859375000000000000000

2020.01.06 01:26:19.085 tst_double (EURUSD,H1) x = 17.1999999999999999995739579543585439398884773254394531250000000000000

2020.01.06 01:26:19.197 tst_double (EURUSD,H1) x = 17.2999999999999999997157829056959599256515502929687500000000000000

2020.01.06 01:26:19.309 tst_double (EURUSD,H1) x = 17.399999999999999985978914528479799628257751464843750000000000000

2020.01.06 01:26:19.420 tst_double (EURUSD,H1) x = 17.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:26:19.532 tst_double (EURUSD,H1) x = 17.60000000000000142108547152020037371742248535156250000000000000

2020.01.06 01:26:19.644 tst_double (EURUSD,H1) x = 17.70000000000000002842170943030404007434344497070312500000000000000

2020.01.06 01:26:19.757 tst_double (EURUSD,H1) x = 17.80000000000000426363256414560601115226745605468750000000000000

2020.01.06 01:26:19.870 tst_double (EURUSD,H1) x = 17.9000000000005684341886080801486968994140625000000000000000

2020.01.06 01:26:19.982 tst_double (EURUSD,H1) x = 18.000000000000007105427357601001858711242675781250000000000000

2020.01.06 01:26:20.093 tst_double (EURUSD,H1) x = 18.100000000000008526512829121202230453491210937500000000000000

2020.01.06 01:26:20.205 tst_double (EURUSD,H1) x = 18.200000000000009947598300641402602195739746093750000000000000

2020.01.06 01:26:20.316 tst_double (EURUSD,H1) x = 18.3000000000000113686837721616029739379882812500000000000000000000

2020.01.06 01:26:20.429 tst_double (EURUSD,H1) x = 18.400000000001278976924368180334568023681640625000000000000000

2020.01.06 01:26:20.542 tst_double (EURUSD,H1) x = 18.5000000001421085471520200373717422485351562500000000000000

2020.01.06 01:26:20.653 tst_double (EURUSD,H1) x = 18.6000000000000156319401867222020408916473333886718750000000000000

2020.01.06 01:26:20.764 tst_double (EURUSD,H1) x = 18.7000000000017053052565824240446090698242187500000000000

2020.01.06 01:26:20.877 tst_double (EURUSD,H1) x = 18.800000000184741111297626260483264923095703125000000000

2020.01.06 01:26:20.989 tst_double (EURUSD,H1) x = 18.900000000000019895196601282805204391479492187500000000000000

2020.01.06 01:26:21.101 tst_double (EURUSD,H1) x = 19.00000000000002131616282072803003005576133728027343750000000000000

2020.01.06 01:26:21.213 tst_double (EURUSD,H1) x = 19.10000000000227373675444432320594789775976562500000000000000000

2020.01.06 01:26:21.326 tst_double (EURUSD,H1) x = 19.2000000002415845301584340631961822225097656250000000000000

2020.01.06 01:26:21.438 tst_double (EURUSD,H1) x = 19.3000000000025579538487363609669136047363232812500000000000000

2020.01.06 01:26:21.551 tst_double (EURUSD,H1) x = 19.40000000000002762395888380807063102722167968750000000000000

2020.01.06 01:26:21.664 tst_double (EURUSD,H1) x = 19.5000000000028421709430304040074343444970703125000000000000000

2020.01.06 01:26:21.776 tst_double (EURUSD,H1) x = 19.60000000000000029842794901924207806587219238282812500000000000

2020.01.06 01:26:21.887 tst_double (EURUSD,H1) x = 19.7000000000000312126386808037344440817832946773437500000000000000

2020.01.06 01:26:22.000 tst_double (EURUSD,H1) x = 19.8000000000032684949844964608550071716308593750000000000000

2020.01.06 01:26:22.112 tst_double (EURUSD,H1) x = 19.900000000341060513164848089218139648437500000000000000000000



Ich möchte allen Ernstes verstehen und erklären, wo die 20.0 geblieben ist?

 
Igor Makanu:

Cool! Du hast vor dem Schlafengehen im Internet gesurft, aber kannst du die Frage beantworten, wo die letzte Iteration geblieben ist? ;) in diesem Beispiel:

Ganz im Ernst: Ich möchte herausfinden und erklären, wo 20.0?

Nun, das ist ziemlich einfach:

0,1 im Double-Typ ist in Wirklichkeit 0,1000000000000000000000055511151231257827021181583404541015625, d. h. mehr als 0,1

daher ? bei der letzten Überprüfung wird es bereits mehr als 20 sein, genauer gesagt 10+100*0.10000000000000000000000000055511151231257827021181583404541015625 ~ 20.000000000000000000000000555111512312578

und der Zyklus endet

und wenn wir dieses Experiment machen:

void OnStart() {
   for(double x = 0.0; x <= 1.0; x += 0.01) {
      printf("x = %10.60f", x);
   }
}

dann das Ergebnis der letzten Iteration:

2020.01.05 16:51:40.480 TestDouble (EURUSD,M1)  x = 0.970000000000000639488462184090167284011840820312500000000000
2020.01.05 16:51:40.480 TestDouble (EURUSD,M1)  x = 0.980000000000000648370246381091419607400894165039062500000000
2020.01.05 16:51:40.480 TestDouble (EURUSD,M1)  x = 0.990000000000000657252030578092671930789947509765625000000000

Aber wenn wir double in float ändern, wird das Ergebnis sein:

2020.01.05 16:53:06.926 TestDouble (EURUSD,M1)  x = 0.979999363422393798828125000000000000000000000000000000000000
2020.01.05 16:53:06.926 TestDouble (EURUSD,M1)  x = 0.989999353885650634765625000000000000000000000000000000000000
2020.01.05 16:53:06.926 TestDouble (EURUSD,M1)  x = 0.999999344348907470703125000000000000000000000000000000000000

weil 0,01 für Double größer als 0,01 ist und für Float kleiner als

 
Nikolai Semko:

So einfach ist das:

0,1 im Typ double ist in Wirklichkeit 0,100000000000000000000005511151231257827021181583404541015625, also größer als 0,1

daher? bei der letzten Überprüfung wird es bereits mehr als 20 sein, genauer gesagt 10+100*0.1000000000000000000000055511151231257827021181583404541015625 ~ 20.000000000000000000000000055555111512312578

und der Zyklus endet

OK, ich hab's.

ja, die for()-Schleife durchläuft die Bedingung und vergleicht sie, das Problem ist gelöst

können Sie diesen Code als Beispiel zeigen:

void OnStart()
{
   for(int x = 10; x <= 20; x += 1) {
      printf("x = %10.60f", x);
      Sleep(111);
   }
}

2020.01.06 01:48:50.513 tst_double (EURUSD,H1) x = 10.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:50.642 tst_double (EURUSD,H1) x = 11.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:50.767 tst_double (EURUSD,H1) x = 12.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:50.892 tst_double (EURUSD,H1) x = 13.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.017 tst_double (EURUSD,H1) x = 14.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.142 tst_double (EURUSD,H1) x = 15.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.267 tst_double (EURUSD,H1) x = 16.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.392 tst_double (EURUSD,H1) x = 17.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.517 tst_double (EURUSD,H1) x = 18.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.642 tst_double (EURUSD,H1) x = 19.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2020.01.06 01:48:51.767 tst_double (EURUSD,H1) x = 20.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


wie erwartet wurde die Schleife bei Erreichen von 20 Punkten abgebrochen

 
Nikolai Semko:

Diese Frage wird immer wieder gestellt.
Die IEEE-Norm 754 ist ständig in aller Munde, aber wenn man auf Wikipedia geht, verlässt man sie oft - entweder wegen der Komplexität oder aus Faulheit - ohne die Bedeutung der Norm zu verstehen.

Ich werde ein wenig Zeit darauf verwenden, diese Norm so kurz wie möglich und in einfachen Worten zu erklären, um in Zukunft auf diesen Beitrag verweisen zu können.

Ich danke Ihnen aus tiefstem Herzen! Ich danke Ihnen!

Diese Nachricht kann nicht nur als Beispiel für die Funktionsweise von doppelten Zahlen herangezogen werden, sondern auch als kompetente, verständliche Antwort an den Nutzer, ohne dass dieser googeln muss.

 
Igor Makanu:

Sie schlagen also vor, dass diejenigen, die auf dem Markt posten, ignoriert werden sollten? Ich bin nicht sicher, ob ich das tun möchte. Es gab eine Frage, es gab eine Diskussion, ich denke, das ist eine normale Situation.

PS:

Darüber hinaus .... versuchen, double per printf() auszudrucken, habe ich den Verdacht, dass es eine Menge "wie viele wundersame Entdeckungen der Geist der Erleuchtung für uns vorbereitet..." geben wird.

;)

Ich habe nichts vorgeschlagen und niemanden zu etwas aufgefordert. Ich denke nur, dass Sie öfter im Forum lesen sollten, nicht nur was Sie selbst geschrieben haben, sondern auch was andere geschrieben haben. Vor allem, wenn einige der wirklich Unerfahrenen Fragen stellen. Denn in diesen Fragen und Antworten kann man viel für sich selbst lernen. Sie können sogar eine Antwort auf eine Frage finden, die Ihnen gar nicht in den Sinn gekommen ist. Über diese Norm IEEE 754 habe ich persönlichschon viel früher erfahren, indem ich die Fragen von Anfängern gelesen habe. Echte Anfänger... Das war die Botschaft, die an Vladimir gerichtet war, als Antwort an Sie.

 
Alexey Viktorov:

Ich habe nichts vorgeschlagen oder jemanden zu etwas aufgefordert. Ich denke nur, dass Sie öfter im Forum lesen sollten, nicht nur was Sie selbst geschrieben haben, sondern auch was andere geschrieben haben. Vor allem, wenn einige der wirklich Unerfahrenen Fragen stellen. Denn in diesen Fragen und Antworten kann man viel für sich selbst lernen. Sie können sogar eine Antwort auf eine Frage finden, die Ihnen gar nicht in den Sinn gekommen ist. Über diese Norm IEEE 754 habe ich persönlichschon viel früher erfahren, indem ich die Fragen von Anfängern gelesen habe. Echte Anfänger... Das war die Botschaft, die an Vladimir gerichtet war, als Antwort an Sie.

Ich werde meine 5 Cents hinzufügen. Alles ist IMHO. Es ist sehr seltsam, mehr als ein Jahr Programmieren zu studieren, ohne sich mit der Basis zu befassen, während die Gleitkomma-Mathematik genau die Basis ist. Nur Docks und Standards werden die Väter der russischen Demokratie (und nicht nur die) retten. Rauchen Sie sie mit Bedacht.
 
Vladimir Pastushak:

Ich danke Ihnen aus tiefstem Herzen! Ich danke Ihnen!

Sie können sich auf diesen Beitrag nicht nur beziehen, um die Funktionsweise der doppelten Zahlen zu erklären, sondern auch als Beispiel für eine kompetente, verständliche Antwort an einen Benutzer, ohne dass er googeln muss.

Gern geschehen :)

 

Ich suche nicht oft nach Pfeilcodes, aber sie sind in der Hilfe unglaublich schwer zu finden!

Es ist eine Tabelle mit Sternchen, Kreisen usw.

Und die Suche ergibt alles andere als das Richtige!