CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Arrondie du float en C

ThoRCX
ThoRCX
Niveau 10
18 février 2008 à 12:15:48

Salut tout le monde,
Je veux calculer un nombre transcendant de type pi, et j'ai envie de choisir le nombre de chiffre après la virgule, et le float pose problème car il est arrondie à 6 chiffres. Je veux pas un nombre fixe de chiffres après la virgule mais une possiblité de pouvoir le choisir, donc je pense qu'il faut en quelque sorte créer une variable ou recoder le float.
PS : je précise que je code sur C, et non C++

Merci d'avance.

saleGauss
saleGauss
Niveau 9
18 février 2008 à 13:10:29

bah tu peux utiliser les "double" ou les "long double" respectivement sur 8 et 10 octets (au lieu de 4 pour un float) mais dans tous les cas la précision sera fixée et ne pourra pas évoluer.

Si tu veux vraimment une précision variable et ce genre de choses, il faut te tourner vers de libs qui doivent implémenter ca (je n'en connais pas mais je suis certain que ca doit exister, fait un tour sur le net).

Sinon tu peux toujours coder ta propre lib, comme ca tu auras réellement quelque chose qui correspondra à tes besoin.
A coup de prog dynamique, tu pourras "réguler" ta précision à loisir.

BOn courage.

godrik
godrik
Niveau 30
18 février 2008 à 14:50:16

il y a des lib pour ca gere les "big numbers".

- GMP (GNU Multiple Precision Arithmetic Library)
http://www.swox.com/gmp/

devrait contenir ce qu'il te faut

ThoRCX
ThoRCX
Niveau 10
19 février 2008 à 11:23:08

Merci pour le lien, par contre comme je suis un débutant en C, j'ai un peu du mal à m'en servir... Déjà est ce qu'il marche sur un windows? car j'ai l'impression que GMP n'est compatible que sur linux. Et après, c'est quelle librairie à utiliser? Car il y en a plusieurs pour différentes fonctions mathématiques.

Merci

godrik
godrik
Niveau 30
19 février 2008 à 11:28:05

dans la section 2.4 de la documentation, il y a des informations sur comment l'utiliser sous windows.

ThoRCX
ThoRCX
Niveau 10
19 février 2008 à 16:33:59

Merci pour le lien godrik, en effet j'ai réussi à l'installer.

Par contre j'ai toujours un problème. En fait, je veux un logiciel qui calcule le nombre de champernowne
(0.12345678910111213141516171819202122232425....)

Mais avec le code que j'ai, j'ai 0.12345679012345679012345679012..., au lieu de continuer vers 10, 11 etc..., ça revient à 0 (en plus y'a le 8 qui disparait mystérieusement...

Voici le code que j'ai :

  1. include <cstdlib>
  2. include <iostream>
  3. include <gmp.h>

using namespace std;

int main(int argc, char *argv[])
{
int n=1000; //approximation de l'affichage
int i=0;
int j=900; //décimales à calculer
mpf_t a; // pour declarer un grand flottant a
mpf_t b; //
mpf_t c; //
mpf_t d;//

mpf_init2 (a,1024); // pour allouer la memoire necessaire au flottant
mpf_init2 (b,1024); //
mpf_init2 (c,1024); //
mpf_init2 (d,1024); //

mpf_set_str (a, "0",10); // a = 0
mpf_set_str (d, "10",10); // d = 10

for (i=0;i<j;i++)
{
mpf_pow_ui (b,d,i); // b = 10^i
mpf_ui_div (c,i,b); // c = i/b
mpf_add (a,a,c); // a = a+c
}

gmp_printf ("%.*Ff with %d digits\n", n, a, n);

mpf_clear(a); // liberer l'espace allouer a a !
mpf_clear(b); // liberer l'espace allouer a a !
mpf_clear(c); // liberer l'espace allouer a a !

system("PAUSE");
return EXIT_SUCCESS;
}

godrik
godrik
Niveau 30
19 février 2008 à 16:50:48

bah oui...
for (i=0;i<j;i++)
{
mpf_pow_ui (b,d,i); // b = 10^i
mpf_ui_div (c,i,b); // c = i/b
mpf_add (a,a,c); // a = a+c
}

quand tu arrive a 10, il faut decaler de 2 decimale et plus d'une seule

dnob700
dnob700
Niveau 10
19 février 2008 à 20:58:37

gmp a certainement une fonction pour construire un flottant depuis uen chaîne de caractère. Donc le plus simple serait peut-être d'écrire le nombre à la précision que tu veux dans une chaîne et ensuite de la faire lire par gmp. En plus, ça serait certainement plus efficace.

ThoRCX
ThoRCX
Niveau 10
20 février 2008 à 11:57:57

dnob >>> gmp gére déjà les big numbers, il y a une utilité particulière d'utiliser des chaines?

godrik >>> je crois voir ce que tu me dis, mais par contre comment coder ça... :question:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment