Erros, bugs, perguntas - página 2623

 
Vladimir Pastushak:

Uma matemática bastante divertida

Resultado

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

É uma questão recorrente.
Todos falam sempre da Norma IEEE 754, mas muitas vezes quando as pessoas vão à Wikipédia, quer por causa da complexidade, quer por causa da preguiça, saem sem compreender o significado da norma.

Vou gastar algum tempo para tentar explicar este padrão o mais brevemente possível e em palavras simples, a fim de me referir mais a este post.


Assim, o tipo duplo consiste em 8 bytes = 64 bits.(flutuador 4 bytes = 32 bits)

E a representação numérica doduplo e float é composta por 3 componentes:sinal, expoente e mantissa


DUPLO:


FLOAT:

Naturalmente não há representação decimal de números neste formato, apenas binário.

  • O sinal é de 1 bit. Se 0 for + (mais), se 1 for - (menos).
  • O expoente armazena o grau para o número 2. Pode estar no intervalo -12610 a 12710 para flutuar e -1022 10 a 102310 para o dobro
  • A mantissa é a parte fracionária do próprio número em forma binária, reduzida a uma forma em que a vírgula fica após a primeira unidade sem ter em conta essa primeira unidade e a vírgula


Um pouco de compreensão da representação binária dos números e a sua relação com os números decimais:

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

Consideremos exemplos para o tipo duplo:

Exemplo 1

Temos um número decimal: 891677.4025191

Este número pode ser representado em formato binário:

110110011011000111011101.011001110000101101110111011111011000100000111111111010001110
(quem quiser pode verificar)))

Extraímos a mantissa do número dado simplesmente movendo a vírgula 19 dígitos para a esquerda (neste caso) para que venha depois da primeira unidade.

1.1011001101100011101011001110000101101111101111000101000001111101110001110* 219

Mas temos uma mantissa de apenas 52 bits. Assim, tomamos as primeiras 52 partes significativas

Мантисса = 1011001101100011101011001110000101101111101111000101

Exponente = (19+1023)10 = 100000100102(como o expoente é um número assinado e o expoente pode ser negativo (por exemplo se tivermos 0,0000042132), precisamos de adicionar 1023 a10(01111111111112), 01111111111112 é zero, tudo mais é positivo, menos é negativo. Por outras palavras, para obter o valor inverso do expoente, precisamos de subtrair 1023 do valor de 11 bits do expoente.

No total, o nosso número 891677.4025191 terá a seguinte aparência no tipo duplo:

0100000100101011001101100011101011001110000101101111101111000101

Mas uma vez que se trata de uma representação binária, vamos convertê-la exactamente para decimal:

que seria891677.4025190999999642521142959595947265625


Exemplo #2

Temos um número decimal: -0.00000145258556224114

Este número pode ser representado em formato binário:

-0.000000000000000000011000010111101100111010110111010011010101001111001110

Extraímos a mantissa deste número movendo simplesmente a vírgula 20 dígitos para a direita, para que seja depois da primeira.

1.1000010111101100111010110111010011010101001111001110 * 2-20

Мантисса = 1000010111101100111010110111010011010101001111001110

expoente = (-20+1023)10=011111010112

sinal de menos, portanto o primeiro bit é 1.

O nosso número total -0.00000145258556224114 terá o seguinte aspecto no tipo duplo:

1011111010111000010111101100111010110111010011010101001111001110

convertê-lo exactamente para decimal:

это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875



No seu caso, o problema ocorre com o número 0,01, uma vez que no tipo duplo será representado no formulário:

0 01111111000 0100011110101110000101000111101011100001010001111011

que quando convertido no sistema de notação decimal é igual a 0,0100000000000000000000208166817117216858513294309377670288085937510

Considerando que com representação

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

sem problemas.

Porque é que o número duplo 0,01 é realmente superior a 0,01?

Eis a razão:

0 01111111000 01000111101101011101110100001010111101011101001010001111011011 - 0.010000000000000000000020816681711721685132943093776702880859375 erro = 0.000 000 000 000 000 208166817...

0 0111111111000 0100011110110101011100001011110111001010001111010 - 0.0099999999999999999998474734433411404097569175064563751220703125 erro = - 0.000 000 000 000 000 000 001 5265566...

Para compreender esta química de processo, pode brincar com estas calculadoras:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

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

 
Vladimir Pastushak:

Uma matemática bastante divertida

Resultado

2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,06000000 0,01 6,00 Próximo lote = 0,0699999999999999999
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0.06000000 0,01 6,00 Próximo lote = 0,06999999999999999
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,06000000 0.01 6,00 Próximo lote = 0,0699999999999999999
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,06000000 0,01 6,00 Próximo lote = 0.069999999999999
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,06000000 0,01 6,00 Próximo lote = 0,069999999999999999999 Como 0. 06000000 + 0,01 torna-se 0,069999999999999999999
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,05000000 0,01 5.00 Próximo lote = 0,06
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,04000000 0,01 4,00 Próximo lote = 0,05
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,03000000 0,01 3,00 Próximo lote = 0,04
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0,02000000 0.01 2.00 Próximo lote = 0.03
2020.01.05 17:09:28.798 Testador EURUSD,H1: 0.01000000 0.01 1.00 Próximo lote = 0.02


Porquê utilizar a função MathFloor (Retorna o valor inteiro mais próximo de baixo) para números fracionários (duplo)?
 
Nikolai Semko:

Esta questão está sempre a surgir.

fixe! anda sonâmbulo pela internet, mas pode responder à pergunta "para onde foi a última iteração"? ;) neste exemplo:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



com toda a seriedade, quero compreender e explicar para onde foi o 20.0 ?

 
Igor Makanu:

fixe! tem navegado na rede à hora de dormir, mas pode responder à pergunta "para onde foi a última iteração"? ;) neste exemplo:

com toda a seriedade, quero descobrir e explicar para onde foi o 20.0?

Bem, é bastante simples:

0,1 no tipo duplo é realmente 0,100000000000000000000005551115151231257827021181583404541015625, ou seja, mais de 0,1

portanto ? na última verificação já será mais de 20, mais precisamente 10+100*0.10000000000000000000000000055511151231257827021181583404541015625 ~ 20.0000000000000000000000000000555111512312578

e o ciclo termina

e se fizermos esta experiência:

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

depois o resultado da última iteração:

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

Mas se mudarmos o dobro para flutuarmos, o 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 o dobro é superior a 0,01, e para a bóia é inferior a

 
Nikolai Semko:

É tão simples quanto isso:

0,1 no tipo duplo é realmente 0,10000000000000000005511151231257827021181583404541015625, que é maior que 0,1

portanto? na última verificação já serão mais de 20, mais precisamente 10+100*0.1000000000000000000000055511151231257827021181583404541015625 ~ 20.00000000000000000000000000000555111512312578

e o ciclo termina

OK, já está.

sim, o laço for() irá iterar e comparar a condição, a questão é resolvida

pode mostrar este código como um exemplo:

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

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

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

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

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

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

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

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

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

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

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


como esperado, o laço foi terminado quando atingiu os 20

 
Nikolai Semko:

É uma questão que está sempre a surgir.
Todos falam sempre da Norma IEEE 754, mas muitas vezes quando as pessoas vão à wikipedia - ou por causa da complexidade, ou por causa da preguiça, saem sem compreender o significado da norma.

Vou gastar algum tempo para tentar explicar este padrão o mais brevemente possível e em palavras simples, a fim de me referir a este post no futuro.

Agradeço-vos, do fundo do meu coração! Obrigado!

Esta mensagem pode ser referida não só como o funcionamento de números duplos, mas também como um exemplo, uma resposta competente e compreensível para o utilizador, sem enviar googling.

 
Igor Makanu:

Então está a sugerir que aqueles que publicam no Mercado devem ser ignorados? Não tenho a certeza de querer fazer isso, houve uma pergunta, houve uma discussão, penso que é uma situação normal

PS:

para além disso .... tentar desimprimir duas vezes via printf(), tenho uma suspeita, haverá muitas "quantas descobertas maravilhosas o espírito da iluminação prepara para nós..."

;)

Eu não sugeri nada nem chamei ninguém para nada. Penso apenas que deveria ler mais frequentemente no fórum, não só o que você mesmo escreveu, mas também o que outros escreveram. Especialmente se algumas das pessoas realmente inexperientes fizerem perguntas. Pois é nestas perguntas e respostas que se pode aprender muito por si próprias. Pode até encontrar uma resposta para a pergunta que nem sequer lhe ocorreu. Sobre esta norma IEEE 754 aprendi pessoalmentemuito mais cedo, apenas a ler as perguntas dos principiantes. Verdadeiros principiantes... Esta foi a mensagem que lhe foi dirigida a Vladimir em resposta a si.

 
Alexey Viktorov:

Eu não sugeri nada nem chamei ninguém para nada. Penso apenas que deveria ler mais frequentemente no fórum, não só o que você mesmo escreveu, mas também o que outros escreveram. Especialmente se algumas das pessoas realmente inexperientes fizerem perguntas. Pois é nestas perguntas e respostas que se pode aprender muito por si próprias. Pode até encontrar uma resposta para a pergunta que nem sequer lhe ocorreu. Sobre esta norma IEEE 754 aprendi pessoalmentemuito mais cedo, apenas a ler as perguntas dos principiantes. Verdadeiros principiantes... Esta foi a mensagem que lhe foi dirigida a Vladimir em resposta a si.

Acrescentarei os meus 5 cêntimos. Tudo é IMHO. É muito estranho fazer mais de um ano de programação e não estudar a base, enquanto a matemática do número de pontos flutuantes é exactamente a base. Assim, apenas as docas e as normas salvarão os pais da democracia russa (e não apenas). Fume-os pensativamente.
 
Vladimir Pastushak:

Agradeço-vos, do fundo do meu coração! Obrigado!

Pode referir-se a este post não só como o funcionamento de números duplos, mas também como um exemplo, de uma resposta competente e compreensível para um utilizador, sem enviar googling.

Não tem de quê :)

 

Não procuro frequentemente códigos de seta, mas são incrivelmente difíceis de encontrar na ajuda!

É uma mesa com asteriscos, círculos, etc.

E a pesquisa devolve tudo menos a pesquisa certa!