Errores, fallos, preguntas - página 2623

 
Vladimir Pastushak:

Matemáticas bastante entretenidas

Resultado

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

Es una pregunta recurrente.
Todo el mundo habla siempre de la norma IEEE 754, pero a menudo, cuando la gente acude a la Wikipedia, ya sea por complejidad o por pereza, se va sin entender el significado de la norma.

Dedicaré un poco de tiempo a tratar de explicar esta norma lo más brevemente posible y con palabras sencillas, para que sirva de referencia a este post.


Así, el tipo doble consta de 8 bytes = 64 bits.(float 4 bytes = 32 bits)

Y la representación numérica dedouble y float consta de 3 componentes:signo, exponente y mantisa


DOBLE:


FLOTA:

Naturalmente, no hay representación decimal de los números en este formato, sólo binaria.

  • El signo es de 1 bit. Si es 0 es + (más), si es 1 es - (menos).
  • El exponente almacena el grado para el número 2. Puede estar en el rango -12610 a 12710 para float y -1022 10 a 102310 para double
  • La mantisa es la parte fraccionaria del propio número en forma binaria, reducida a una forma en la que la coma se sitúa después de la primera unidad sin tener en cuenta esa primera unidad y la coma


Un poco de comprensión de la representación binaria de los números y su relación con los números decimales:

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

Veamos ejemplos para el tipo doble:

Ejemplo 1

Tenemos un número decimal: 891677.4025191

Este número se puede representar en forma binaria:

11011001101100011101.01100111000010110111111101100010000011111010001110
(quien quiera puede comprobarlo))

Extraemos la mantisa del número dado simplemente moviendo la coma 19 dígitos a la izquierda (en este caso) para que venga después de la primera unidad.

1.1011001101100011101011001110000101101111101111000101000001111101110001110* 219

Pero tenemos una mantisa de sólo 52 bits. Así que tomamos los primeros 52 bits significativos

Мантисса = 1011001101100011101011001110000101101111101111000101

Exponente = (19+1023)10 = 100000100102(como el exponente es un número con signo y el exponente puede ser negativo (por ejemplo si tenemos 0,0000042132), tenemos que sumar 1023 a10(011111111112), 0111111112 es cero, todo lo que sea más es positivo, menos es negativo. En otras palabras, para obtener el valor inverso del exponente, tenemos que restar 1023 al valor de 11 bits del exponente.

En total, nuestro número 891677.4025191 tendrá el siguiente aspectoen tipo doble:

0100000100101011001101100011101011001110000101101111101111000101

Pero como se trata de una representación binaria, vamos a convertirla exactamente a decimal:

que sería891677.402519099996425211429595947265625


Ejemplo 2

Tenemos un número decimal: -0.00000145258556224114

Este número puede representarse en forma binaria:

-0.000000000000000000011000010111101100111010110111010011010101001111001110

Extraemos la mantisa de este número simplemente desplazando la coma 20 dígitos a la derecha, de forma que quede después del primero.

1.1000010111101100111010110111010011010101001111001110 * 2-20

Мантисса = 1000010111101100111010110111010011010101001111001110

exponente = (-20+1023)10=011111010112

signo menos, por lo que el primer bit es 1.

Nuestro número total -0,00000145258556224114 tendrá el siguiente aspecto en el tipo doble:

1011111010111000010111101100111010110111010011010101001111001110

convertirlo exactamente en decimal:

это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875



En tu caso, el problema se produce con el número 0,01, ya que en el tipo doble se representará de la forma

0 01111111000 0100011110101110000101000111101011100001010001111011

que convertido al sistema de notación decimal es igual a 0,01000000000000000020816681711721685132943093776702880937510

Mientras que con la representación

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

no hay problema.

¿Por qué el número doble 0,01 es realmente mayor que 0,01?

He aquí la razón:

0 01111111000 01000111101101110100001011110101001010001111011 - 0,010000000000000000000020816681711721685132943093776702880859375 error = 0,000 000 000 000 000 000 208166817...

0 0111111111000 01000111101101011100001010001111010 - 0,009999999999999847344334114097569175064563751220703125 error = - 0,000 000 000 000 000 001 5265566...

Para entender este proceso químico puedes jugar con estas calculadoras:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

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

 
Vladimir Pastushak:

Matemáticas bastante entretenidas

Resultado

2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Siguiente lote = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Siguiente lote = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Siguiente lote = 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Siguiente lote = 0.0699999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.06000000 0.01 6.00 Lote siguiente = 0.06999999999999999 As 0.06000000 + 0.01 se convierte en 0.069999999999999
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.05000000 0.01 5.00 Próximo lote = 0.06
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.04000000 0.01 4.00 Próximo lote = 0.05
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.03000000 0.01 3.00 Siguiente lote = 0.04
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.02000000 0.01 2.00 Lote siguiente = 0.03
2020.01.05 17:09:28.798 Testert EURUSD,H1: 0.01000000 0.01 1.00 Lote siguiente = 0.02


¿Por qué utilizar la función MathFloor (Devuelve el valor entero más cercano desde abajo) para números fraccionarios (double)?
 
Nikolai Semko:

Esta pregunta se plantea constantemente.

¡genial! vas sonámbulo por internet, pero ¿puedes responder a la pregunta "dónde fue la última iteración"? ;) en este ejemplo:

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.127 tst_double (EURUSD,H1) x = 10.0999999999964286321199949907064437866210937500000000000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.000000000071054277601001858711242675781250000000000000

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.20000000000994759830064140260219573974609375000000000

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

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

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

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

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.9000000000000198951966012828052043914792187500000000000000

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

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

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

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.4000000000000276239588838080631027167968750000000000000

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

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

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

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.9000000003410605131648480892181396484375000000000000



con toda seriedad, quiero entender y explicar a dónde ha ido a parar el 20.0 ?

 
Igor Makanu:

¡qué guay! has estado navegando por la red a la hora de dormir, pero ¿puedes responder a la pregunta "dónde fue la última iteración"? ;) en este ejemplo:

con toda seriedad, quiero averiguar y explicar a dónde fue el 20.0

Bueno, es bastante sencillo:

0,1 en el tipo doble es realmente 0,1000000000000000000555111512312578270211815834041015625, es decir, más de 0,1

por lo tanto... en la última comprobación ya será más de 20, más exactamente 10+100*0.10000000000000055511151231257827021181583404541015625 ~ 20.000000000000000000555111512578

y el ciclo termina

y si hacemos este experimento:

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

entonces el resultado de la última iteración:

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

Pero si cambiamos double por float, el resultado será

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

porque 0,01 para double es mayor que 0,01, y para float es menor que

 
Nikolai Semko:

Es tan sencillo como eso:

0,1 en el tipo doble es realmente 0,1000000000000005511151231257827021181583404541015625, es decir, mayor que 0,1

por lo tanto... en la última comprobación ya será más de 20, más exactamente 10+100*0.1000000000000000000000055511151231257827021181583404541015625 ~ 20.00000000000000000000000000555111512312578

y el ciclo termina

Bien, lo tengo.

sí, el bucle for() iterará y comparará la condición, el problema está resuelto

puede mostrar este código como ejemplo:

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

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

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

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

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

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

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

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


como era de esperar, el bucle se terminó al llegar a 20

 
Nikolai Semko:

Es una pregunta que se plantea constantemente.
Todo el mundo habla siempre de la norma IEEE 754, pero a menudo, cuando la gente acude a la wikipedia, ya sea por complejidad o por pereza, se va sin entender el significado de la norma.

Dedicaré un poco de tiempo a intentar explicar esta norma lo más brevemente posible y con palabras sencillas, para poder remitirse a este post en el futuro.

Se lo agradezco de todo corazón. Gracias.

Este mensaje puede ser referido no sólo como el funcionamiento de los números dobles, sino también como un ejemplo, una respuesta competente y comprensible para el usuario, sin enviar a Google.

 
Igor Makanu:

¿Así que está sugiriendo que se ignore a los que publican en el Mercado? No estoy seguro de querer hacer eso, hubo una pregunta, hubo una discusión, creo que es una situación normal

PS:

además de eso .... intente desimprimir el doble a través de printf(), tengo la sospecha, de que habrá un montón de "cuántos descubrimientos maravillosos nos prepara el espíritu de la iluminación..."

;)

No he sugerido nada ni he llamado a nadie a nada. Sólo creo que deberías leer más a menudo en el foro, no sólo lo que tú mismo has escrito, sino también lo que han escrito otros. Sobre todo si algunos de los realmente inexpertos hacen preguntas. Porque es en estas preguntas y respuestas puede aprender mucho por sí mismo. Incluso puede encontrar una respuesta a la pregunta que ni siquiera se le había ocurrido. Sobre esta norma IEEE 754 personalmente aprendímucho antes, sólo leyendo las preguntas de los principiantes. Los verdaderos principiantes... Ese era el mensaje dirigido a Vladimir en respuesta a usted.

 
Alexey Viktorov:

No he sugerido nada ni he llamado a nadie a nada. Sólo creo que deberías leer más a menudo en el foro, no sólo lo que tú mismo has escrito, sino también lo que han escrito otros. Sobre todo si algunos de los realmente inexpertos hacen preguntas. Porque es en estas preguntas y respuestas puede aprender mucho por sí mismo. Incluso puede encontrar una respuesta a la pregunta que ni siquiera se le había ocurrido. Sobre esta norma IEEE 754 personalmente aprendímucho antes, sólo leyendo las preguntas de los principiantes. Los verdaderos principiantes... Ese era el mensaje dirigido a Vladimir en respuesta a usted.

Añadiré mis 5 centavos. Todo es IMHO. Es muy extraño hacer más de un año de programación y no estudiar la base, mientras que las matemáticas de los números de punto flotante son exactamente la base. Así pues, sólo los muelles y las normas salvarán a los padres de la democracia rusa (y no sólo). Fúmatelos con calma.
 
Vladimir Pastushak:

Se lo agradezco de todo corazón. Gracias.

Puedes referirte a este post no sólo como el funcionamiento de los números dobles, sino también como un ejemplo, de una respuesta competente y comprensible para un usuario, sin necesidad de enviar a Google.

De nada :)

 

No suelo buscar los códigos de las flechas, ¡pero son increíblemente difíciles de encontrar en la ayuda!

Es una tabla con asteriscos, círculos, etc.

¡Y la búsqueda devuelve cualquier cosa menos el derecho!