Convertir en int en double
J'ai couru ce programme simple, mais quand je convertir int
à double
, le résultat est zéro. Le sqrt
des zéros puis affiche des valeurs négatives. C'est un exemple à partir d'un tutoriel en ligne donc je ne suis pas sûr de savoir pourquoi cela se passe. J'ai essayé sous Windows et Unix.
/* Hello World program */
#include<stdio.h>
#include<math.h>
main()
{ int i;
printf("\t Number \t\t Square Root of Number\n\n");
for (i=0; i<=360; ++i)
printf("\t %d \t\t\t %d \n",i, sqrt((double) i));
}
Vous pouvez poster votre code.
Sans le code en question, ce ne peut être répondu de manière significative.
sqrt ne retourne jamais les valeurs négatives. Vos problèmes sont très profondes. Le fait que vous ne m'en rends pas compte que nous aurions besoin de voir votre code de réponse c'est votre problème fondamental. J'espère que vous ne pensez pas que l'ordinateur peut faire la même chose!
David, en fait, vous devez réaliser qu'il ya une autre possibilité c'est que j'ai oublié d'inclure le code à l'origine. Veuillez laisser votre attitude condescendante de ce conseil.
Je suis désolé de vous ont offensé. J'ai été trop sévère. Mais il y a un grain de vérité là-dedans aussi. Parfois, il paye pour aller un peu plus lentement. Vérifiez et revérifiez lors du codage, et lors de la rédaction des questions, et, dans mon cas, lors de l'écriture des commentaires.
Sans le code en question, ce ne peut être répondu de manière significative.
sqrt ne retourne jamais les valeurs négatives. Vos problèmes sont très profondes. Le fait que vous ne m'en rends pas compte que nous aurions besoin de voir votre code de réponse c'est votre problème fondamental. J'espère que vous ne pensez pas que l'ordinateur peut faire la même chose!
David, en fait, vous devez réaliser qu'il ya une autre possibilité c'est que j'ai oublié d'inclure le code à l'origine. Veuillez laisser votre attitude condescendante de ce conseil.
Je suis désolé de vous ont offensé. J'ai été trop sévère. Mais il y a un grain de vérité là-dedans aussi. Parfois, il paye pour aller un peu plus lentement. Vérifiez et revérifiez lors du codage, et lors de la rédaction des questions, et, dans mon cas, lors de l'écriture des commentaires.
OriginalL'auteur user994165 | 2012-01-28
Vous devez vous connecter pour publier un commentaire.
Le problème est d'une utilisation incorrecte de format de printf utiliser %g/%f au lieu de %d
BTW - si vous vous demandez ce que votre code n'a ici est une mini explication qui peut vous aider à comprendre:
printf routine a traité votre résultat en virgule flottante de sqrt comme un entier. Signé, des entiers non signés ont leur sous-tendent les représentations en bits (en termes plus simples, c'est la façon dont ils sont encodés dans la mémoire, registres, etc). Par la spécification de format de printf vous lui dire comment il doit déchiffrer que le motif de bits dans la mémoire spécifique de la zone de registre/(dépend des conventions d'appel, etc). Par exemple:
donne: "comme signé=[-1] comme unsigned=[4294967295]"
Un motif de bits utilisés, mais traités comme signé les premiers et non signé plus tard. Même s'applique à votre code. Vous avez dit printf pour traiter la séquence de bits qui a été utilisé pour "encoder" floating point résultat de la racine en tant qu'entier. Voir ceci:
impressions: "41000000"
Selon simple précision à virgule flottante format d'encodage.
8.0 est tout simplement (-1)^0*(1+fraction=0)*2^(exp=130-127)=2*3=8.0, mais imprimé en tant que int ressemble juste 41000000 (hex).
Le tutoriel n'aurait pas utilisé de %d pour une valeur à virgule flottante
Avez-vous vraiment jamais vu un tutoriel, livre etc ... sans une seule faute de frappe/bug? Il se passe vraiment.
OriginalL'auteur Artur
Peut-être cela?
Curieusement, le titre de sa question était. Oh bien.
OriginalL'auteur Erick Smith
sqrt()
renvoie une valeur de typedouble
. Vous ne pouvez pas imprimer une de ces valeurs avec les indicateurs de conversion"%d"
.Essayez l'une de ces deux alternatives
La
i
argumentsqrt()
est converti en double implicitement, aussi longtemps que il ya un prototype dans le champ d'application. Depuis que vous avez inclus le bon en-tête, il n'est pas nécessaire pour une conversion explicite.OriginalL'auteur pmg