Erros, bugs, perguntas - página 3150

 
Nikolai Semko #:

O operador ternário parece mais conciso (IMHO)

int limit = prev_calculated==0 ? 0: prev_calculated-1;

de forma ainda mais concisa :

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

Já escrevi que com esta construção está a aceder ao índice tampão com rates_total (quando pré_calculado == 0 ).
E isto é um transbordo, porque rates_total é o tamanho do tampão, o último elemento do qual rates_total é -1

Sim, compreendo porque é que o transbordo está a acontecer agora!

Porque é que esta construção funcionava antes e porquenão funciona agora?

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)

Porque o tampão é atribuído exactamente a taxas_total
e não ataxas_total+1

Estou à espera de ouvir o que Artyom tem a dizer, ele compreende a questão.
 
Roman #:

Sim, compreendo porque é que o transbordo está a acontecer agora!

Porque é que este desenho funcionava antes,mas agora não funciona?

Porque o tampão é atribuído exactamente a taxas_total
e não ataxas_total+1

Não existe tal coisa como milagres.
Se funcionou antes, deve ter sido um código diferente.

 
Roman #:

Com este desenho.


o tampão indicador sai fora dos limites.

Por favor mostre-me um exemplo decarraças com o ciclo i>=0
talvez me tenha esquecido do que estou a fazer mal
.

reduzir o índice em 2 ou 3 no limite máximo, para ter a certeza).

 
Nikolai Semko #:

Não há milagres.
Se funcionou antes, deve ter sido um código diferente

Anteriormente, o cálculo correcto do limite era

int limit = rates_total-1-prev_calculated;

e passaria para o laço i>=0.

for(int i=limit; i>=0; i--)

Mas não vai funcionar agora porque o limite acaba por ser de -1

 
Esta discussão é fora de tópico, pertence a algum tópico de novato
 
Roman #:

O cálculo correcto utilizado para ser

e entraria em loop i>=0

Agora não vai entrar porque o limite acaba por ser de -1

Não consegui entrar com o mesmo código antes, também.
não inventar coisas.

descarregue a velha construção de Hatimlansky e verifique, se não acredita em mim.

 
TheXpert #:
Esta discussão é aqui fora de tópico, pertence a algum tópico de novato

Se nunca utilizou este desenho antes, então abstenha-se com o seu offtop.

 
Nikolai Semko #:

Também não consegui entrar com o mesmo código antes de
não o inventar

de Hatimlansky descarregar a velha construção e verificá-la se não acredita em mim.

A Artem também utilizou esta construção.
Que ele descreveu acima, por isso só ele compreende o problema aqui.

 
Roman #:

O cálculo correcto utilizado para ser

e entraria em loop i>=0

E agora não o faz, porque o limite acaba por ser -1.

Houve sempre uma verificação: if(limit>1) limit=rates_total-1. Isto é para os casos em que não há i+something nos cálculos. Se houver, então estes "quantos-alguma-coisa" devem ser incluídos na construção: limite=taxas_total-1-alguma-coisa.

Sem ele, haveria sempre uma série de ultrapassagens. Porque tarifas_total não é mais do que Bars(). De forma correspondente, se houver 5000 barras e abordarmos o índice 5000, estaremos fora dos limites da matriz (o cálculo das barras começa com zero).

No seu exemplo, o cálculo do limite está errado:

int limit = rates_total-1-prev_calculated;

Deveria ser assim:

int limit = rates_total-prev_calculated;

E depois de verificar o limite>1

e se o limite for superior a um, então limite = taxas_total-1