begin process at 2010 02 10 13:18:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > FONCTION FTOA

FONCTION FTOA


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :03/04/2005 Vu / téléchargé :5 965 / 274

Auteur : vecchio56

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Je crois qu'il n'existe pas de fonction pour mettre un flottant dans une chaîne à part sprintf qui marche quand elle veut bien, et qui nous oblige à utiliser la CRT (wsprintf n'accepte pas %f). C'est pourquoi j'ai écrit cette fonction qui est un peu plus rapide (a peine quand les parties entière et/ou décimale sont grandes) mais qui a besoin de beaucoup de données (les tableaux exp2Pos et exp2Neg). Elle est moins complete que sprintf (on se choisit pas la précision, pas d'arrondi ni d'écriture avec exposant).
Ma méthode peut sembler un peu brutale mais c'est la seule que j'ai trouvée, si quelqu'un voit comment faire sans stocker les puissances de 2 je suis preneur).
J'attends vos avis.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Release
    • bnPrecis.dllTélécharger ce fichier [Réservé aux membres club]3 584 octets
    • ftoa.exeTélécharger ce fichier [Réservé aux membres club]61 440 octets
  • bnPrecis.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier323 octets
  • bnPrecis.libTélécharger ce fichier [Réservé aux membres club]2 818 octets
  • ftoa.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier37 240 octets
  • ftoa.ncbTélécharger ce fichier [Réservé aux membres club]19 456 octets
  • ftoa.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier897 octets
  • ftoa.suoTélécharger ce fichier [Réservé aux membres club]8 192 octets
  • ftoa.vcprojTélécharger ce fichier [Réservé aux membres club]3 421 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip COLORATION DE CODE C/C++ POUR LE FORUM DE CPPFRANCE
Source avec Zip SUPPRIMER LES # AJOUTÉS LORS D'UN COPIER/COLLER
Source avec Zip Source avec une capture CRÉER UN FICHIER ISO À PARTIR D'UN RÉPERTOIRE (WIN32)
Source avec Zip Source avec une capture EXPLORATEUR DE FICHIERS ISO
Source avec Zip Source avec une capture CHARGER UNE POLICE DEPUIS UN FICHIER OU UNE RESSOURCE (WIN32...

 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

Commentaires et avis

Commentaire de DeAtHCrAsH le 06/04/2005 12:09:28

Vont finir par avoir ta peau ces flottants :-)
sprintf marche quand elle veut ??? c.a.d ?

Commentaire de vecchio56 le 06/04/2005 15:08:29 administrateur CS

Ca veut juste dire que l'autre fois elle marchait pas

Commentaire de magma le 28/05/2005 17:11:20


char* fcvt (double, int, int*, int*);

(Inclure stdlib.h)

Commentaire de ctx_man le 11/06/2005 08:26:24

Ne serai-til pas plus simple de calculer l'exposant biaisé (l'orthographe doit pas être bon mais je pense que tu comprend ce dont je parle) puis la partie fractionnaire et faire 2 itoa en mettant une virgule entre les deux ?

Commentaire de ctx_man le 11/06/2005 09:00:58

Bon ben en fait, mathématiquement, c'est pas possible pour moi (en tout cas pas de si bon heure et n'ayant pas dormit...)
Mais j'ai une autre solution :

int valeur = flottant * 10^n //n etant le nombre de chiffre apres
                             //la virgule que tu souhaite avoir

itoa(je sais plus l'ordre des param ! lol);
mais maintenant tu n'a plus qu'a poser ta virgule sachant que les n derniers caractere de ta chaine sont ceux apres la virgule.

Commentaire de vecchio56 le 11/06/2005 17:37:01 administrateur CS

Pour commencer, j'avais pas envie d'utiliser itoa. Je sais que j'ai mis un petit moment a écrire cette fonction, j'espère que je ne suis passé à coté d'un solution évidente

Commentaire de ctx_man le 11/06/2005 22:06:36

Je me disais aussi que ce n'etait pas normal que quelqu'un qui fait des code aussi complexe que les tiens ne pense pas a une solution aussi conne que la mienne. Pour une solution plus simple que la tienne et qui n'utilise pas itoa je n'ai vraiment pas le niveau de maths requis, déjà que je ne l'ai pas pour ta solution actuelle...
Bonne continuation

Commentaire de rrk275 le 05/10/2005 23:19:58

pour trouver un fottant à decimales en base 10:
on trouve la partie decimale 0,.... {partflottante = nb - int(nb)}
on a aussi la partie entiere (ex 46568){partentiere = int(nb)}
on multiplie par 10^6 la partie decimal partflottante  *10^6= 0......,.....
on fait itoa(partentiere)+"."+"itoa(int(partflottante))"
je sais que tu ne veux pas utiliser itoa et j'avoue ne pas avoir lu le code
mais c'est pas plus simple ???

Commentaire de vecchio56 le 07/10/2005 21:33:14 administrateur CS

le but est entre autre de ne pas obliger l'utilisateur à utiliser la CRT

Commentaire de racpp le 11/07/2008 03:33:08 administrateur CS

Salut,
En cherchant un exemple pour une réponse à une question du forum, je suis tombé sur ce code source.
Est-il possible d'utiliser le type float (ou double) sans CRT?
Je n'ai jamais réussi à le faire car le linker n'arrive pas à résoudre le symbole __fltused. Pour contourner le problème, j'évite le type float dans mon code et le remplace par une structure de champs de bits conforme et des fonctions à base d'instructions assembleur du coprocesseur comme fld,fdiv, fmul etc. Ce serait bien pratique de pouvoir utiliser les floats directement sans CRT.

Commentaire de vecchio56 le 18/07/2008 20:24:17 administrateur CS

C'est vrai, on peut pas utiliser les float sans CRT. Pourquoi j'ai fait ca??

Commentaire de draluorg le 16/02/2009 05:28:45

Salut à tous,
Ce post date un peu je sais, mais on peut utiliser les float sans crt.
Sous vs2008 suffit d'activer "Omettre les noms de librairie par defaut" (/Zl)

++

Commentaire de racpp le 19/02/2009 21:15:57 administrateur CS

draluorg >> Es-tu sûr d'avoir totalement viré la CRT? As-tu bien vérifié les dépendances et le code ASM généré?
Je me rappelle bien avoir essayé cette option sous VC2005 mais sans succès. On a toujours le message d'erreur du linker:
error LNK2001: unresolved external symbol __fltused

Commentaire de draluorg le 19/02/2009 23:24:53

Salut Racpp,

Eh en effet cette option est capricieuse je viens de retester sur un new projet et ca me donne la meme erreur :s
Je suis pourtant actuellement encore sur un projet ou cette option suffit...

Enfin bref avec cette declare ça regle le probleme:

#if defined(__cplusplus)
extern "C" {
#endif
int _fltused;
#if defined(__cplusplus)
};
#endif

Voici un ptit projet de test (avec un ftoa), regarde le code assembleur stu veux moi perso j'ai trouvé aucune trace du crt.
http://systemzeb.free.fr/FloatNoCRT.zip

++

Commentaire de racpp le 20/02/2009 00:57:09 administrateur CS

Remarque: pour pouvoir virer totalement la CRT il faut travailler en C et non en C++.
Merci pour le code je vais le regarder demain.

Commentaire de racpp le 20/02/2009 01:18:28 administrateur CS

Je n'ai pas pu résister j'ai vu le code. En effet, il n'y a aucune dépendance à la CRT. Le code ASM contient bien les instructions de traitement des floats. Il parait que c'est une nouveauté VC2008 car mon VC2005 n'arrive même pas à ouvrir le projet. Dommage. J'essaierai d'y voir plus clair plus tard.
Merci pour le partage.

Commentaire de draluorg le 20/02/2009 17:06:20

re,

Pas de quoi, de mon coté je ne m'explique toujours pas pourquoi dans mon autre projet cette option suffit au compilateur.
Je viens encore de verifier, si je desactive cette fonction le projet ne compile plus!
Enfin comme on dit, la theorie c'est quand on connait tout mais que rien ne va, et la pratique c'est quand tout fonctionne et qu'on ne sait pas pourquoi...

++

Commentaire de racpp le 20/02/2009 21:21:50 administrateur CS

Salut,
Je viens d'essayer avec VC2005 et ça ne marche pas. Après avoir declaré int _fltused; en global il me sort l'erreur:
error LNK2001: unresolved external symbol __ftol2
L'hypothèse de la nouveauté VC2008 se confirme donc. C'est une bonne nouvelle car cela nous éviterait d'utiliser de l'ASM pour utiliser les float sans CRT. Je vais donc bientôt passer à VC2008.
Vu le grand nombre d'options de compilation et d'édition des liens, on peut parfois se perdre et ne plus savoir ce qu'on fait. C'est ça la programmation avec ses joies et ses frustrations.
Merci encore.

Commentaire de draluorg le 20/02/2009 22:39:39

re,

Erf, c'est encore pire que ce que j'avais pensé...
Mais j'ai plus ou moins trouvé

On prend mon petit projet (celui du zip plus haut)
on vire la declare et l'option du compilo, erreur crtMain machin

on active l'option, l'erreur crtmain est corrigee, mais on a l'erreur fltused

on fait un petit #pragma comment(lib, "ntdll.lib")
et hop plus d'erreur!!!
direction sortie asm... que voit on ?
EXTRN __fltused:DWORD

Voilà qui explique le mistére, tu peux toujours essayer sous vs2005 sait-on jamais...

++

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales