Criando variáveis ​​flutuantes e duplas no VEXcode Pro V5

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

Tipos que contêm números com casas decimais – float, double

Esses tipos de dados são frequentemente chamados de tipos de dados de ponto flutuante. Os números são chamados de números de ponto flutuante.

float fvar = 50,15;
dvar duplo = 50,0;

Compare o tipo de dados de ponto flutuante – float e double

A diferença entre um tipo de dados float e double está na precisão do número de casas decimais.

Com base na especificação VexOS – ARM 7, float pode lidar com 6 ou 7 lugares e double pode lidar com 15 ou 16.

float: no V5os atual, o controlador parece permitir até 8 casas decimais de precisão.

por exemplo

float fvar1 = 1,12345670;
float fvar2 = 1,12345678;

fval1 é diferente de fvar2,

contra

float fvar1 = 1,123456780; 
float fvar2 = 1,123456781;

fval1 será avaliado da mesma forma que fvar2.

double: permite até 17 casas decimais de precisão.

por exemplo

duplo dvar1 = 1,12345678912345678;
duplo dvar2 = 1,12345678912345670;

dval1 é diferente de dvar2,

contra

duplo dvar1 = 1,123456789123456789;
duplo dvar2 = 1,123456789123456780;

dval1 será avaliado da mesma forma que dvar2.


Não use "double" a menos que precise de alta precisão

Há dois motivos pelos quais você não deve usar "double", a menos que precise de alta precisão:

  1. Ocupa o tipo float 2X.
  2. Ocupa um poder de processamento muito maior.

Com base na especificação VexOS – ARM 7, um float pode ocupar 6 ou 7 casas e um double pode lidar com 15 ou 16. Em ambos os casos, você não deve confiar na precisão dos últimos dígitos em double ou float. Ele é armazenado de forma muito diferente do armazenamento de um “int” devido a algo chamado “cálculo de ponto flutuante” (que está fora do escopo deste artigo).

Assim, você poderá perder a precisão nas últimas casas decimais.

A operação em double é bastante cara em comparação com float e muito mais alta que em “integer” devido a algo chamado cálculo de ponto flutuante.

Com base no padrão IEEE, o seguinte está dentro de uma faixa mais confiável.

Tipo Menor valor positivo Maior valor positivo Nº de precisão
flutuador 10 -38 10 38 x 3,40282 6 dígitos
dobro 10 -308 ou 2,22507 10 308 x 1,79769 15 dígitos

Você pode trocar tipos de dados primitivos? - Fundição

É possível trocar tipos de dados. Essa técnica é chamada de “Fundição”. Embora a transmissão seja uma prática bastante comum, faça isso apenas se for necessário. 

Uma das práticas mais comuns é trocar char e int.

Isso ocorre porque ambos representam valores inteiros com uma exceção: 

  • “int” contém 4 bytes (ou 8 bytes em algum compilador)
  • “char” contém apenas 1 byte.

Então, por exemplo

char aVal = 100;
int iVal = aVal; //casting implícito

ou

int iVal = (char) aVal; // conversão explícita.

Cuidado com truncamento implícito:

por exemplo

códigosnippet3.png

Outra prática comum é trocar int e float
float fVal = 5,486;
fração flutuante = fVal - (int)fVal; //faz: 5.486 - 5

Cuidado com truncamento implícito:

por exemplo

int iVal = 50;
float fVal = iVal/100;

agora fVal = 0,0, NÃO 0,5.

Não há problema em aproveitar o truncamento implícito, que geralmente é uma parte importante das operações em alguns cenários. No entanto, você precisa ter certeza de que está usando essa técnica intencionalmente.

Se você não deseja que o truncamento implícito ocorra, você precisa fazer uma conversão explícita:

  • conversão implícita: float fVal = iVal / 100,0;
  • conversão explícita: float fVal = (float) iVal / 100

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: