Les types de variables.... [C]

Fermé
lagarkane - 13 juil. 2010 à 11:55
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 13 juil. 2010 à 16:58
Bonjour,

Voilà en gros mon problème:

Je tente de créer une fonction qui va m'afficher un double, peu importe sa taille.
Or d'après ce que j'ai compris, un nombre de type double peut monter jusqu'à 1.7*10^308.
Cela nous donne un nombre comprenant au maximum 309 caractères, si je ne m'abuse? :D

Ma technique consistait à créer une variable de type int, et d'y stocker la partie entière
int partieEntière = nombreDecimal;

et d'isoler ensuite la partie décimale du nombre en faisant :
partieDecimale = nombreDecimal - partieEntiere;


Seulement un int ne peut stocker que 10caractères max, donc c'est impossible de stocker un nombre de type float ou double de taille max.

Bref, ma 1ère technique ne pouvait donc pas marcher. Or dans mon cas, je suis obligé de caster mon nombre en int, puisque j'ai absolument besoin d'utiliser l'opérateur modulo, qui ne peut s'appliquer qu'aux types int.

Y a-t-il une solution à mon problème?

En gros, comment appliquer le modulo à un nombre ayant plus de 10 caractères?

(je précise que le but de l'exercice consiste à reprogrammer à ma façon les fonctions classiques, des librairies math.h, stdio.h, stdlib.h et Compagnie)

2 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
13 juil. 2010 à 12:58
Salut.
Or d'après ce que j'ai compris, un nombre de type double peut monter jusqu'à 1.7*10^308.
Cela nous donne un nombre comprenant au maximum 309 caractères, si je ne m'abuse? :D

Malheureusement faux... la valeur que tu donnes est la valeur maximale. En fait un double est représenté par une partie flottante de 15 chiffres (environ) et 3 digit pour l'exposant. (cf. https://fr.wikipedia.org/wiki/Float
Donc, pour faire ce que tu veux faire, il faut tout d'abord repérer la puissance max.
Et n'oublie pas qu'un réel peut être compris entre 0 et 1, donc une infinité de chiffre à écrire en théorie ;)
0
Okay! ^^"

Bref, dans tous les cas... Impossible de représenter ce nombre sous une variable de type int ou long, même en séparant la partie décimale de la partie entière, en tout cas pas sans réduire la valeur max du float ou du double. :'(

Ca m'ennerve, parce que je trouves des fonctions du genre putc, puts, putchar
mais je trouve aucune fonction qui pourrait me donner des indications sur l'affichage d'un float....

Si j'arrivais à transformer mon float en string, et à mettre caractère par caractère dans un tableau, mais sans utiliser le modulo, j'suis franchement à court d'idées...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
13 juil. 2010 à 16:58
regarde dans la doc, il y a des fonctions pour convertire un flottant en string.
Mais le plus simple c'est tout de même d'utiliser printf avec les bonnes options.
0