Pregunta

¿Hay algún compilador que tenga una directiva o un parámetro para fundir el cálculo entero para flotar implícitamente? Por ejemplo:

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

La "F" es "0", porque las constantes de cálculo (1, 3, 10) son enteros. Quiero convertir el cálculo de enteros con una directiva o parámetro del compilador. Quiero decir, no usaré un casting explícito o prefijo ".f" como ese:

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

o

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

¿Conoce algún compilador C/C ++ que tenga algún parámetro para hacer este proceso sin una fundición explícita o ".f"?

¿Fue útil?

Solución

Si no le gustan los dos métodos que mencionó, probablemente no tenga suerte.

¿Qué esperas lograr con esto? Cualquier operador especializado que hiciera "división flotante" tendría que convertir los INT a flotadores en algún momento después de la tokenización, lo que significa que no obtendrá ningún beneficio de rendimiento en la ejecución.

Otros consejos

Cualquier compilador que hiciera lo que desea ya no sería un compilador conforme C ++. La semántica de la división entera está bien especificada (al menos para números positivos), y está proponiendo cambiar eso.

También sería peligroso ya que terminaría aplicando todo, y en algún momento podría tener un código que se basa en la aritmética de enteros estándar, que en silencio no sería válido. (Después de todo, si tuvieras pruebas que lo atraparían, presumiblemente tendrías pruebas que atraparían la aritmética entera no deseada).

Entonces, el único consejo que tengo es escribir pruebas unitarias, tener revisiones de código e intentar evitar números mágicos (en lugar de definirlos como const float).

En C ++ es un poco extraño ver un montón de valores numéricos salpicados a través del código. En general, se considera la mejor práctica mover cualquier 'número mágico' como estos a su propio valor de flotación estática constante, lo que elimina este problema.

No, esas dos opciones son las mejores que tienes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top