Pergunta

Existe algum compilador que tenha uma diretiva ou um parâmetro para lançar o cálculo inteiro para flutuar implicitamente. Por exemplo:

float f = (1/3)*5;
cout << f;

O "f" é "0", porque as constantes do cálculo (1, 3, 10) são inteiras. Quero converter o cálculo inteiro com uma diretiva ou parâmetro do compilador. Quero dizer, não vou usar o elenco explícito ou o prefixo ".f" como esse:

float f = ((float)1/3)*5;

ou

float f = (1.0f/3.0f)*5.0f;

Você conhece algum compilador C/C ++ que tenha algum parâmetro para fazer esse processo sem a coisa explícita de elenco ou ".f"?

Foi útil?

Solução

Se você não gosta de nenhum dos dois métodos que mencionou, provavelmente está sem sorte.

O que você espera realizar com isso? Qualquer operador especializado que "divisão de flutuação" teria que converter INTs para flutuar em algum momento após a tokenização, o que significa que você não obterá nenhum benefício de desempenho na execução.

Outras dicas

Qualquer compilador que fez o que você deseja não seria mais um compilador C ++ em conformidade. A semântica da divisão inteira é bem especificada (pelo menos para números positivos) e você está propondo mudar isso.

Também seria perigoso, pois acabaria se aplicando a tudo, e você poderia, em algum momento, ter código que depende da aritmética inteira padrão, que seria silenciosamente inválida. (Afinal, se você tivesse testes que o pegariam, presumivelmente teria testes que pegassem a aritmética inteira indesejada.)

Portanto, o único conselho que tenho é escrever testes de unidade, ter análises de código e tentar evitar números mágicos (em vez de defini -los como const float).

Em C ++, é um pouco estranho ver um monte de valores numéricos espalhados pelo código. Geralmente, é considerado as melhores práticas mover qualquer 'números mágicos' como esses para seu próprio valor estático de flutuação const, que remove esse problema.

Não, essas duas opções são as melhores que você tem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top