Domanda

C'è un compilatore che ha una direttiva o un parametro di lanciare il calcolo integer a stare a galla in modo implicito. Ad esempio:

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

il "f" è "0", poiché le costanti di calcolo (1, 3, 10) sono numeri interi. Voglio convertire il calcolo integer con una direttiva del compilatore o un parametro. Voglio dire, non userò cast esplicito o prefisso ".F" così:

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

o

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

Sapete qualsiasi C / C ++ che ha qualsiasi parametro per fare questo processo senza cast esplicito o ".F" cosa?

È stato utile?

Soluzione

Se non ti piace nessuno dei due metodi che hai citato, probabilmente siete fuori di fortuna.

Cosa speri di ottenere con questo? Qualsiasi operatore specializzato che ha fatto "float-divisione" avrebbe dovuto convertire interi a carri ad un certo punto, dopo tokenizzazione, il che significa che non hai intenzione di ottenere alcun miglioramento delle prestazioni sull'esecuzione.

Altri suggerimenti

Ogni compilatore che ha fatto ciò che si vuole non sarebbe più un compilatore C ++ conforme. La semantica di divisione intera sono ben specificati (almeno per i numeri positivi), e si sta proponendo di cambiare la situazione.

Sarebbe anche pericoloso, in quanto sarebbe finire l'applicazione a tutto, e si potrebbe ad un certo punto avere il codice che si basa su aritmetica intera serie, che sarebbe in silenzio non essere valido. (Dopo tutto, se tu avessi le prove che avrebbe raggiunto questo, si avrebbe presumibilmente test che avrebbe raggiunto l'aritmetica intera indesiderato.)

Quindi, l'unico consiglio che ho è quello di scrivere unit test, avere le revisioni del codice, e cercare di evitare i numeri magici (invece definendoli come const float).

In C ++ è un po 'strano vedere un gruppo di valori numerici cosparsi attraverso il codice. Generalmente si considera le migliori pratiche per spostare tutti i 'numeri magici' come questi al proprio valore const float statica, che elimina questo problema.

No, queste due opzioni sono il meglio di te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top