Partage
  • Partager sur Facebook
  • Partager sur Twitter

Floating point exception ??

sous ubuntu avec Geany

Sujet résolu
8 novembre 2008 à 16:41:37

Bonjour les zéros!

En voulant faire le TP de la premiere partie de Mateo, j' ai pondu ce code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char** argv)
{
	long compteur = 0;
	long nombreChoisi =0;
	long nombreMystere =0;
	const long MAX =100, MIN = 1;
	srand(time(NULL));
	nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

	printf("**********************************************************\n");
	printf("*                                                        *\n");
	printf("*                   LE NOMBRE MYSTERE                    *\n");
	printf("*                                                        *\n");
	printf("**********************************************************\n\n\n");



	printf("\nC'est parti !\n");


	while (nombreChoisi != nombreMystere)
	{
		compteur++;
		printf("entrez un nombre\n");
		scanf("%ld",&nombreChoisi);

		if(nombreChoisi<nombreMystere)  
		{
			printf("C'est plus !\n");
		}
		else if(nombreChoisi>nombreMystere)
		{
			printf ("C'est moins !\n");
		}
		else if (nombreChoisi==nombreMystere)
		{
			printf("Gagné!!!!!!!!!!!\n");
		}
	}
	printf("vous avez trouvé en %ld",compteur);

return 0;
}



Et Geany (Quand je fait Build and run avec Codeblocks, ca n' affiche pas de console...) m' affiche une console avec
écrit: Floating point exception

Voila je sais pas ce que ca veut dire et ca m' ennerve... voila!
  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2008 à 16:51:34

tu as divise quelque part par 0 ...
  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2008 à 19:51:46

Ah bon ?? mais ou ça ??

Quelque part daans la génération d 'un nomber aléatoire c 'est le seul où il y a un modulo...

salut
  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2008 à 20:02:08

Ton code compile (excepté un warning pour argc et argv qui ne servent à rien), et s'exécute correctement.
**********************************************************
*                                                        *
*                   LE NOMBRE MYSTERE                    *
*                                                        *
**********************************************************



C'est parti !
entrez un nombre
50
C'est moins !
entrez un nombre
25
C'est plus !
entrez un nombre
37
C'est plus !
entrez un nombre
43
C'est moins !
entrez un nombre
40
GagnÚ!!!!!!!!!!!
vous avez trouvÚ en 5
Process returned 0 (0x0)   execution time : 32.969 s
Press any key to continue.


Peut-être pourrais-tu nous en dire plus ? Cette erreur est-elle systématique ? Ou apparait-elle dans des cas bien particuliers ?
Et es-tu sur de bien compiler en C et pas en C++ ?
  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2008 à 20:58:23

Excusez moi le problème venait en effet de la génération aléatoire d 'un nombre puisqu' après avoir re-copier/coller les quelques lignes de code de Mateo, Le code s 'éxécute...

Excusez moi de vous avoir dérangé,

Merci beaucoup,

Linuksse
  • Partager sur Facebook
  • Partager sur Twitter
16 août 2016 à 14:41:20

Bonjour,

je me suis dit que c'était possible de revenir pour parler d'un même problème, la division par 0.

J'ai écrit ce code pour trouver des nombres premiers avec la constante de Mill's, avec la formule du binôme de Newton. Mais j'ai la "floating exception 8" comme réponse.

Quelqu'un peut-il me dire où est mon erreur?

Merci d'avance.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <math.h>
#include "gmp.h"


int main()
{
    int n, prod1=1, prod2=1, prod3=1, i=1, k=1;
    
    printf("Entrez la puissance de la constante de Mill (nombre à deux chiffres maximum): ");
    scanf("%d", &n);
    
    int a;
    a=pow(3,n);
    
    float c;
    c=1.3063778;
   
    
    float d;
    d=0.0000000000000000000000001;
    
    float sum=0, f=1, e=1, g=1;
 
    
    for (k = 1; k <= a; k++)
    {
        prod1 = prod1 * k ;
        
        for (i=1; i<=k; i++)
        {
            prod2 = prod2 * i;
            e = e * c;
        }
        for (i=1; i<=a-k; i++)
        {
            prod3 = prod3 * i;
            f = f * d;
        }
        
        g = prod1 / (prod2 * prod3);
        
        sum = sum + f * e * g;
        
    }
    sum = sum + pow(d,n);
    printf("Votre nombre premier est la partie entière de ce nombre = %f\n",sum);
    
    return 0;
}



  • Partager sur Facebook
  • Partager sur Twitter
16 août 2016 à 15:18:14

Bonjour,

Tu utilises float, qui est un type de précision réduite, pour les optimisations. Utilises donc le classique type double ; il permettra peut-être de représenter assez précisément 0.0000000000000000000000001, qui à mon avis est arrondi à 0.0 en float.

-
Edité par Marc Mongenet 16 août 2016 à 15:18:47

  • Partager sur Facebook
  • Partager sur Twitter
22 août 2016 à 3:53:22

ok thanks!! sinon, j'ai cette erreur de compilation, any idea that you could suggest to me to solve the pbm?

Après avoir tapé "g++ -o mills mills.cpp -lgmp -lgmpxx", j'ai ça...

 In file included from mills.cpp:8:
/usr/local/include/gmpxx.h:2281:9: error: no matching member function for call
      to 'eval'
  { Op::eval(p, expr.val1.__get_mp(), expr.val2); }
    ~~~~^~~~
/usr/local/include/gmpxx.h:2132:8: note: in instantiation of member function
      '__gmp_expr<__mpf_struct [1], __gmp_binary_expr<__gmp_expr<mpf_t, mpf_t>,
      long, __gmp_binary_xor> >::eval' requested here
  expr.eval(f);
       ^
/usr/local/include/gmpxx.h:1932:5: note: in instantiation of function template
      specialization '__gmp_set_expr<__gmp_binary_expr<__gmp_expr<mpf_t, mpf_t>,
      long, __gmp_binary_xor> >' requested here
  { __gmp_set_expr(mp, expr); return *this; }
    ^
mills.cpp:114:22: note: in instantiation of function template specialization
      '__gmp_expr<__mpf_struct [1], __mpf_struct [1]>::operator=<__mpf_struct
      [1], __gmp_binary_expr<__gmp_expr<mpf_t, mpf_t>, long, __gmp_binary_xor>
      >' requested here
    cplusdpuissancea = cplusd^a;
                     ^
/usr/local/include/gmpxx.h:851:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
              ^
/usr/local/include/gmpxx.h:847:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
              ^
/usr/local/include/gmpxx.h:855:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, mpz_srcptr w, double d)
              ^
/usr/local/include/gmpxx.h:845:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
              ^
/usr/local/include/gmpxx.h:849:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
              ^
/usr/local/include/gmpxx.h:853:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
              ^
/usr/local/include/gmpxx.h:857:15: note: candidate function not viable: no known
      conversion from 'typename __gmp_resolve_expr<__mpf_struct [1]>::ptr_type'
      (aka '__mpf_struct *') to 'mpz_ptr' (aka '__mpz_struct *') for 1st
      argument
  static void eval(mpz_ptr z, double d, mpz_srcptr w)
              ^
1 error generated.

je sais pas quoi faire, j'ai déjà regardé sur pas mal de forums...

-
Edité par magox 22 août 2016 à 3:53:46

  • Partager sur Facebook
  • Partager sur Twitter
22 août 2016 à 13:28:48

Bonjour,

C'est du C++, tu t'es trompé de forum.

  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2020 à 18:55:09 - Message modéré pour le motif suivant : Le flood est strictement interdit


27 mars 2020 à 22:55:19

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter