Pour les balezes en C : division par 0 sous linux OK mais pas win - C++ - Programmation
Marsh Posté le 08-01-2003 à 21:31:42
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
Marsh Posté le 08-01-2003 à 22:03:13
merci je vais regarder ca de suite ... ca pourra m aider pour les algos de recherche de chemin ...
Marsh Posté le 08-01-2003 à 23:11:15
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 !
Marsh Posté le 08-01-2003 à 23:42:16
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
Marsh Posté le 09-01-2003 à 05:36:44
nraynaud a écrit : Je vais finir documentaliste moi ! |
N'hésites pas à t'exprimer dans la sous-catégorie bibliolinks !
Marsh Posté le 09-01-2003 à 09:47:07
ça marche pas sous Windows... avec quels compilos ?
parce qu'en C++Builder ça fonctionne très bien...
Marsh Posté le 09-01-2003 à 10:12:21
euh ... Visual C++ 6.0, enfn j ai essayé vite fait en fait.
Marsh Posté le 09-01-2003 à 10:13:40
ouais mais VC++ quand tu fais :
for(int i .....)
{
....
}
for(int i .....)
{
....
}
il veut pas non plus
Marsh Posté le 09-01-2003 à 10:53:11
euh ? ca depend des options de compilations ca ... perso je peux le faire (mais je le fais pas car c pas bieng)
Marsh Posté le 09-01-2003 à 11:22:15
antp a écrit : ouais mais VC++ quand tu fais : |
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....
Marsh Posté le 09-01-2003 à 11:38:30
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.
Marsh Posté le 08-01-2003 à 21:15:33
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 :
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)
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.