Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1844 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pour les balezes en C : division par 0 sous linux OK mais pas win

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pour les balezes en C : division par 0 sous linux OK mais pas win

n°282210
xilebo
noone
Posté le 08-01-2003 à 21:15:33  profilanswer
 

SAlut,
 
Je developpe depuis de nombreuses annees en C (systeme et haut niveau) donc je commence a connaitre le langage mais je viens de tomber sur un bout de code qui me laisse perplexe :
 

Code :
  1. #define min(a,b) ((a)<(b) ? (a):(b))
  2. #define max(a,b) ((a)>(b) ? (a):(b))
  3. #define Inf 1.0/0.0
  4. #define NaN  0.0/0.0


 
 
Les 2 dernieres lignes , je comprends pas comment ca peut marcher ... et pourtant sous linux , ca marche (sous windows il refuse a cause de la division par 0)
 
 

Code :
  1. if (!strcmp(ch,"Inf" )){
  2.                 x=Inf;
  3.         }


 
 
L affectation dans x se passe bien, et la comparaison avec Inf dans la suite du code fonctionne aussi.
 
Comment ca peut etre possible, je pensais que les notions d infini n existait pas sur un ordi.
 
 
Merci d avance.

mood
Publicité
Posté le 08-01-2003 à 21:15:33  profilanswer
 

n°282214
Taz
bisounours-codeur
Posté le 08-01-2003 à 21:31:42  profilanswer
 

normal, c'est un "UB" (undefined behaviour). cela depend donc de ta plateforme: traditionnellement on dit que ça peut aussi bien faire planter ton programme ou envoyer un virus par ton carnet d'adresse.
 
tu n'a pas besoin de ça. la norme définit dans float.h FLT_MAX. tu veux l'infini (standard IEEE754) ? c'est FLT_MAX+FLT_EPSILON, bref, tout ce qui est > à FLT_MAX.
 
le mieux c'est que tu te documentes sur sur l'IEEE754 et si tu veux tester des valeur, tu pourra le faire en hexa. mais gaffe au SIGFPE  ;)
 
 
http://archive.stsci.edu/fits/fits [...] 0000000000


Message édité par Taz le 08-01-2003 à 21:32:32
n°282222
xilebo
noone
Posté le 08-01-2003 à 22:03:13  profilanswer
 

merci je vais regarder ca de suite ... ca pourra m aider pour les algos de recherche de chemin ...

n°282260
nraynaud
lol
Posté le 08-01-2003 à 23:11:15  profilanswer
 

xilebo a écrit :

merci je vais regarder ca de suite ... ca pourra m aider pour les algos de recherche de chemin ...


Tiens un petit coup de Dijkstra ...
sinon, concernant les nombres en virgule flotante, je prescris un petit Golberg : http://cch.loria.fr/documentation/ [...] ldberg.pdf
"What Every Computer Scientist Should Know About Floating-Point Arithmetic".
 
 
Je vais finir documentaliste moi !

n°282270
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 08-01-2003 à 23:42:16  profilanswer
 

Par contre faut pas abuser des nombres qui valent Inf ou NaN, les processeurs sont pas prévus pour les manipuler aussi vite que les nombre valides (quand la levée d'exception du FPU est désactivée par défaut, c'est le cas sous linux/x86 mais pas sous OSF par ex.). Bref ce que je voulais dire au début de ma phrase c'est que le calcul de Inf+Inf peut etre 100 fois plus lent que le calcul de 1+1

n°282340
Musaran
Cerveaulté
Posté le 09-01-2003 à 05:36:44  profilanswer
 

nraynaud a écrit :

Je vais finir documentaliste moi !

N'hésites pas à t'exprimer dans la sous-catégorie bibliolinks !


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°282364
antp
Super Administrateur
Champion des excuses bidons
Posté le 09-01-2003 à 09:47:07  profilanswer
 

ça marche pas sous Windows... avec quels compilos ?
parce qu'en C++Builder ça fonctionne très bien...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°282373
xilebo
noone
Posté le 09-01-2003 à 10:12:21  profilanswer
 

euh ... Visual C++ 6.0, enfn j ai essayé vite  fait en fait.

n°282375
antp
Super Administrateur
Champion des excuses bidons
Posté le 09-01-2003 à 10:13:40  profilanswer
 

ouais mais VC++ quand tu fais :
 
for(int i .....)
{
 ....
}
for(int i .....)
{
 ....
}
 
il veut pas non plus :sarcastic: :whistle:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°282400
xilebo
noone
Posté le 09-01-2003 à 10:53:11  profilanswer
 

euh ? ca depend des options de compilations ca ... perso je peux le faire (mais je le fais pas car c pas bieng)

mood
Publicité
Posté le 09-01-2003 à 10:53:11  profilanswer
 

n°282419
lorill
Posté le 09-01-2003 à 11:13:39  profilanswer
 

xilebo a écrit :

(mais je le fais pas car c pas bieng)

:??:

n°282429
xilebo
noone
Posté le 09-01-2003 à 11:22:15  profilanswer
 

antp a écrit :

ouais mais VC++ quand tu fais :
 
for(int i .....)
{
 ....
}
for(int i .....)
{
 ....
}
 
il veut pas non plus :sarcastic: :whistle:  


 
:jap:
 
autant pour moi, j 'avais mal compris... effectivement en VC++, la portée de cette declaration est audessus du for donc si on met 2 for de suite avec une declaration int i dedans , il met une erreur variable already defined... C pour ca que je disais pas bien de declarer comme ca des variables dans le for car c apres on s y retrouve plus.
 
Par contre je ne savais pas que ct local au for avec d autres compilateurs....

n°282441
Kristoph
Posté le 09-01-2003 à 11:38:30  profilanswer
 

C'est la faute a Visual. La norme dit que la portee doit etre locale au for et c'est très pratique comme ça.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pour les balezes en C : division par 0 sous linux OK mais pas win

 

Sujets relatifs
[Linux - libpng - processeur ARM] Comment obtenir la lib png pour pdatimers sous linux
Linux, DSL, Open GL et drivers Nvidia : Problemepb ODBC linux MySQL
[Linux] Doc sur le format ELF[Linux] Utiliser une commande dans un programme
[PHP et C++/Linux] Exec(), et processus en tache de fond semi-bloquant[résolu - C & Linux] Compilation du C sous Mandrake
Comment avoir une précision inferieure a la seconde sous linux ?[PHP] division entière et modulo
Plus de sujets relatifs à : Pour les balezes en C : division par 0 sous linux OK mais pas win


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)