DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
6 avril 2005 à 12:09
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010
-
20 févr. 2009 à 22:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 20 févr. 2009 à 22: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...
++
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 20 févr. 2009 à 21:21
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.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 20 févr. 2009 à 17:06
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...
++
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 20 févr. 2009 à 01:18
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.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 20 févr. 2009 à 00:57
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.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 19 févr. 2009 à 23:24
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:
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
++
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 19 févr. 2009 à 21:15
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
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 16 févr. 2009 à 05:28
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)
++
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 18 juil. 2008 à 20:24
C'est vrai, on peut pas utiliser les float sans CRT. Pourquoi j'ai fait ca??
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 11 juil. 2008 à 03:33
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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 7 oct. 2005 à 21:33
le but est entre autre de ne pas obliger l'utilisateur à utiliser la CRT
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 5 oct. 2005 à 23:19
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 ???
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 11 juin 2005 à 22:06
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
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 11 juin 2005 à 17:37
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
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 11 juin 2005 à 09:00
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.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 11 juin 2005 à 08:26
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 ?
cs_magma
Messages postés198Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention18 mars 2011 28 mai 2005 à 17:11
char* fcvt (double, int, int*, int*);
(Inclure stdlib.h)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 6 avril 2005 à 15:08
Ca veut juste dire que l'autre fois elle marchait pas
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 6 avril 2005 à 12:09
Vont finir par avoir ta peau ces flottants :-)
sprintf marche quand elle veut ??? c.a.d ?
20 févr. 2009 à 22:39
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...
++
20 févr. 2009 à 21:21
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.
20 févr. 2009 à 17:06
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...
++
20 févr. 2009 à 01:18
Merci pour le partage.
20 févr. 2009 à 00:57
Merci pour le code je vais le regarder demain.
19 févr. 2009 à 23:24
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
++
19 févr. 2009 à 21:15
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
16 févr. 2009 à 05:28
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)
++
18 juil. 2008 à 20:24
11 juil. 2008 à 03:33
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.
7 oct. 2005 à 21:33
5 oct. 2005 à 23:19
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 ???
11 juin 2005 à 22:06
Bonne continuation
11 juin 2005 à 17:37
11 juin 2005 à 09:00
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.
11 juin 2005 à 08:26
28 mai 2005 à 17:11
(Inclure stdlib.h)
6 avril 2005 à 15:08
6 avril 2005 à 12:09
sprintf marche quand elle veut ??? c.a.d ?