2016-10-01 4 views
1

Je courais ce simple morceau de code CComment pouvez-vous utiliser un nombre à virgule flottante comme exposant dans c

#include "stdafx.h" 
#include "math.h" 

int main() 
{ 
float i = 5.5; 
float score = 0; 

score=i/(i+(2^i)); 

} 

et l'éditeur dit que le flotteur i « doit être une valeur ENUM intégrale ou sans portée » , et il est essentiel que je reste un flotteur. Comment utiliser un float comme exposant dans c?

+3

'^' est Exponentiation pas en C! Lire un tutoriel sur C avant de faire des suppositions infondées! – fuz

Répondre

5

Modifier ceci:

score=i/(i+(2^i)); 

à ceci:

score = i/(i + pow(2, i)); 

^ est l'opérateur XOR, vous avez besoin pow(double base, double exponent); mettre tout ensemble:

#include "math.h" 
#include "stdio.h" 

int main() 
{ 
     float i = 5.5; 
     float score = 0; 

     score = i/(i + pow(2, i)); 
     printf("%f\n", score); 
     return 0; 
} 

Sortie:

[email protected]:~$ gcc -Wall main.c -lm -o main 
[email protected]:~$ ./main 
0.108364 

Au , comme njuffa mentionné, vous pouvez utiliser exp2(float n):

Calcule 2 élevé à la puissance n donnée .

et au lieu de:

pow(2, i) 

utilisation:

exp2f(i) 
+0

Ça l'a fait, merci! –

+0

Super @ J.doo, n'oubliez pas * d'accepter * une réponse! – gsamaras

+0

Probablement préférable d'utiliser 'exp2f (i)' ici au lieu de 'pow (2, i)' en termes de performance et de précision, et sans doute plus clair. – njuffa

1

En C l'expression

2^i 

utilise l'opérateur XOR au niveau du bit ^, ce n'est pas un exposant, d'où le conseil que i doit être de type entier.

Essayez d'utiliser la fonction mathématique pow comme avec

score = i/(i + pow(2,i));