Perguntas de um "boneco" - página 127

 
Renat:

Caro Senhor, observe o contexto.

1) Quando se salta de um ambiente controlado e seguro para um tampão em bruto completamente descontrolado, é o único responsável pela compatibilidade com esse ambiente binário.

2) Quando escreve o código, é responsável pela arquitectura desse código. E não lamente que "é difícil colocar um cavalo e uma corça na mesma carroça" quando se utilizam estruturas diferentes.

3) Recomendo que leia a descrição de CLBufferRead e CLBufferWrite - graças ao vazio universal* referência, pode passar qualquer tipo de referência ao OpenCL. E também há compensações e tamanhos.

1. estou pronto para esta responsabilidade. // ajustando uma gravata imaginária e lutando para conter as gargalhadas.

2. não estou a chorar. É uma tolice escrever as suas próprias matrizes bidimensionais ou tridimensionais que parecem já existir na língua. E tem de o fazer.

3. vou verificá-lo. Na versão antiga, a passagem de uma matriz bidimensional NÃO funcionava. Não o experimentou no novo de memória antiga.

// ArrrayCopy() também parece ter o seu vazio, mas é de pelúcia e aplica-se apenas ao tipo de matriz, não à dimensão.

Fui verificar o terceiro item.

 

Está exactamente a chorar e a acusar-nos de deficiências no processo. Portanto, não há necessidade de fazer palhaçadas.

Sobre arrays multidimensionais:

  • As matrizes multidimensionais funcionam.
  • usar OOP, manter/ocultar arrays dentro das classes
  • passagem menos irrazoável de matrizes multidimensionais como parâmetros.
  • utilizam activamente estruturas - tornam a vida e o controlo muito mais fáceis, reduzindo a complexidade.
Imediatamente, tornar-se-á mais fácil e mais correcto.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Renat:

Está a chorar e a acusar-nos de deficiências. Portanto, não há necessidade de fazer palhaçadas.

Sobre arrays multidimensionais:

  • As matrizes multidimensionais funcionam.
  • usar OOP, manter/ocultar arrays dentro das classes
  • Passagem menos irrazoável de matrizes multidimensionais como parâmetros
  • utilizam activamente estruturas - tornam a vida e o controlo muito mais fáceis, reduzindo a complexidade.
Tornar-se-á imediatamente mais fácil e mais correcto.

E o meu descontentamento foi bem fundamentado porque (por exemplo) este código não funcionava na versão anterior:

void gpuCalculate()
  {
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {nets[i*CountInd+j]=NETs[i][j];}}
//   CLBufferWrite(cl_Mem_NET,nets);
   CLBufferWrite(cl_Mem_NET,NETs);
   CLExecute(cl_Krn,1,Offs,Works);
   CLBufferRead(cl_Mem_Result,Result);
//   CLBufferRead(cl_Mem_NET,nets);
   CLBufferRead(cl_Mem_NET,NETs);
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {NETs[i][j]=nets[i*CountInd+j];}}
  }

E tive de reescrever a matriz duas vezes a mais em cada ciclo de processamento (ver o código comentado).

Numa outra versão fiz uma matriz de objectos virtual própria (como a do Nikolai), mas é desajeitado de usar também (especialmente quando se escreve a genética) - a sintaxe funcional é exaustiva nos locais.

Agora que o código funciona, a matriz bidimensional é de facto escrita para o buffer. Isto é um progresso. :)

OK, Paz, Amizade, Goma... :) Se fizer sobrecarga de operador, eu próprio corrigirei a sintaxe.

 
A sobrecarga do operador já feita, estará disponível no próximo edifício.
 
Renat:
A sobrecarga do operador já feita, estará disponível na próxima construção.

Uau!! É um belo toque.

Muito obrigado a toda a equipa de desenvolvimento por isso !

Agora será possível escrever um código muito bonito.

 
Renat:
A sobrecarga do operador já foi feita, estará disponível na próxima construção.

Porquê letras tão pequenas? É uma questão retórica.

Melhor assim:



Перегрузку операторов уже сделали, будет доступно в следующем билде.



 

A sobrecarga do operador é um novo conceito para mim. Encontrei uma descrição detalhada aqui: http://programmersclub.ru/24/

É isto?

Уроки по С++, Урок 24. Перегрузка операторов
  • www.programmersclub.ru
Как вы уже знаете, тип переменной определяет набор значений, которые она может хранить, а также набор операций, которые можно выполнять над этой переменной. Например, над значением переменной типа int ваша программа может выполнять сложение, вычитание, умножение и деление. С другой стороны, использование оператора плюс для сложения двух строк...
 
tol64:

A sobrecarga do operador é um novo conceito para mim. Encontrei uma descrição detalhada aqui: http://programmersclub.ru/24/

É isto?

Sim, é.
 
Urain:

Porquê letras tão pequenas? É uma questão retórica. Eu prefiro isso:



Перегрузку операторов уже сделали, будет доступно в следующем билде.




Sim, vai ser uma construção muito solene.

:)

 
Renat:

Receio que não tenha querido reparar na sobreposição na descrição:

typedef Int8 = int[8];
struct   Int8 { int arr[8]; };

A segunda opção é muito mais limpa, mais potente e com mais controlo. Não há ressonância na invenção de outra entidade mais fraca da forma existente.

A segunda versão da descrição não é o problema. O problema é que quando se usa, a sintaxe não muda para melhor.

Ofereço-lhe um compromisso poderoso e absolutamente seguro: campos "default". A palavra-chave default resolve completamente o desacordo sintáctico. :)

Neste caso.

struct   Int8 
  { 
    int arr[8]; default;
  };

(C++ faz, C# faz, Delphi faz, etc.)

Ou seja, ao aceder a tal campo, basta escrever Int8Var[i] em vez de Int8Var.arr[i] - o compilador compreenderá correctamente.

// E o principal não é esquecer de o fazer não só para as aulas, mas também para as estruturas. :)