0
votes

Jeo = (1 / (1 + décennie)); ne me donne pas une réponse précise

int decade;
float jeo;
PRINT("Enter Decade point =\r\n");
scanf("%d",&decade);
print_decimal(decade);
PRINT("\r\n");
jeo=(1/(1+decade));
PRINT("Decade point =");
print_decimal(jeo);//my function for showing floating point number.
PRINT("\r\n");
I have wrote this code in IAR embedded workbench software for ARM controller, but it's not giving me accurate answer, can anyone tell me why??
"when i am entering 3. it's giving me 0 answer". 

3 commentaires

La division Integer est la question immédiate. Vous avez également un pôle pendant une décennie -1 qui est un comportement indéfini, bien que l'IEEE754 le définit.


Dupliqué possible de Résultat de la division est toujours zéro


Il y a des tonnes de duplicats Division 1 / N renvoie toujours 0.0 , Division entière Toujours zéro , C ++. La division 1 par n'importe quel nombre donne 0 ...


3 Réponses :


2
votes

Vous attribuez le résultat d'un Division entier à Jeo code>. Dans ce cas, si décennie code> est un entier autre que 0, le résultat de la division entière sera 0. (Remarque: si décennie code> est -1 code >, vous aurez un comportement non défini à la suite de la division par 0 code>)

Lorsque le type après les conversions arithmétiques habituelles est un type d'entier, le résultat est le quotient algébrique (pas une fraction), arrondi dans la direction définie par la mise en oeuvre (jusqu'à C99) tronquée vers zéro (depuis C99) P> blockquote>

Faites donc le numérateur ou le dénominateur A float code>. p>

jeo=((float)1/float(1+decade);


3 commentaires

Au lieu de (flotteur) 1 Il sera plus clair à utiliser 1.0f . Mais en général doubles devraient être utilisés à moins que vous sachiez que vous avez vraiment besoin d'un flotteur


@Pluclv: d'accord. OP défini jeo comme float.


@Ati: vous êtes les bienvenus. Consultez ce lien sur quoi faire lorsque votre question est répondue. Stackoverflow.com/help/someone-answers



3
votes

Vous faites juste votre calcul avec entier code> et attribuer ensuite à un flottant code>. Cela retirera les chiffres après le point décimal.

Essayez ceci: p>

jeo=(1.0/(1.0+decade));


0 commentaires

0
votes

Essayez ceci xxx

Ceci est parce que lorsque vous essayez d'utiliser un entier dans une expression logique comme celle-ci, le résultat est calculé entier puis converti en float . Cette procédure supprime bien sûr les chiffres après le point décimal et ajoute des 0s artificiels.


0 commentaires