Posté le 04/02/2023 21:33
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 250 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 04/02/2023 21:40 | #
Dans le code source de libfxcg (https://github.com/Jonimoose/libfxcg), les formats pour les nombres flottants ne sont pas supportés : https://github.com/Jonimoose/libfxcg/blob/master/libc/printf.c#L271-L284
Dans la bibliothèque standard que Yatis et moi avons écrite, les formats %f, %F, %e, %E, %g et %G sont supportés (https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc/src/branch/master/src/stdio/printf/format_fp.c). Malheureusement il serait difficile d'utiliser notre bibliothèque standard avec libfxcg, donc ce n'est pas vraiment une solution.
Une approximation toute bête serait de convertir le double en entier :
/* Print to 6 decimal digits (only works for values near 1) */
long long i = d * 1e6;
printf("%d.%06d", i/100000, i%100000);
Mais cela ne marche que pour les valeurs ni trop grandes ni trop petites, il faut gérer les nombres négatifs, etc. Ce n'est pas très satisfaisant. >_<
Citer : Posté le 04/02/2023 22:04 | #
Lephenixnoir, grazie per le informazioni, sto provando a realizzare una libreria "general purpose" per facilitarmi l' I/O di variabili nei vari formati e pensavo che per stampare un float a display sprintf() andasse bene, invece da quanto appreso non è possibile, credo allora che l'unica soluzione è sviluppare una funzione ad hoc che estrae la stringa dagli 64bit del float, smontando l' ieee754.
Un lavoraccio
Citer : Posté le 04/02/2023 22:21 | #
C'est dur en effet ; ne le fais pas toi-même. Notre version de printf() utilise un algorithme appelé Grisu2b. Grisu2b prend un nombre flottant et indique quels sont les chiffres significatifs et l'exposant. Par exemple :
// Grisu2b would say:
// digits = 123456
// exponent = -3
Le code de Grisu2b est libre de droits. Tu peux le récupérer dans notre libc, déjà adapté et simplifié (https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc/src/branch/master/3rdparty/grisu2b_59_56).
Citer : Posté le 04/02/2023 22:26 | #
GRAZIEEEEE!!!
MERCIIIIII
Questo semplifica il lavoro di molto