Le 25-03-2009, ? propos de Division et arrondi, lhommedumatch ?crivait dans fr.comp.lang.c :
J'ai ce programme: #include <iostream> #include <math.h>
int main() { float x.0; float y=1.0; float scale=0.1; int res;
res = int (x/scale); std::cout << res << std::endl; return 0; }
Si je le compile avec: version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) sur une machine 32bits j'obtiens 99 sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la taille du float sur les deux architectures ? 0.1 ne peut être représenté par une suite finie de bit (donc sa représentation n'est pas exacte). x/scale peut donc donner 99.9999999 en représentation décimale. Si la taille du float n'est pas la même des deux côté, cela pourrait expliquer la différence de comportement.
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 25-03-2009, ? propos de
Division et arrondi,
lhommedumatch ?crivait dans fr.comp.lang.c :
J'ai ce programme:
#include <iostream>
#include <math.h>
int main()
{
float x.0;
float y=1.0;
float scale=0.1;
int res;
res = int (x/scale);
std::cout << res << std::endl;
return 0;
}
Si je le compile avec:
version gcc 4.1.2 20071124 (Red Hat 4.1.2-42)
sur une machine 32bits j'obtiens 99
sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la taille du float
sur les deux architectures ? 0.1 ne peut être représenté par une suite
finie de bit (donc sa représentation n'est pas exacte). x/scale peut
donc donner 99.9999999 en représentation décimale. Si la taille du float
n'est pas la même des deux côté, cela pourrait expliquer la différence
de comportement.
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 25-03-2009, ? propos de Division et arrondi, lhommedumatch ?crivait dans fr.comp.lang.c :
J'ai ce programme: #include <iostream> #include <math.h>
int main() { float x.0; float y=1.0; float scale=0.1; int res;
res = int (x/scale); std::cout << res << std::endl; return 0; }
Si je le compile avec: version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) sur une machine 32bits j'obtiens 99 sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la taille du float sur les deux architectures ? 0.1 ne peut être représenté par une suite finie de bit (donc sa représentation n'est pas exacte). x/scale peut donc donner 99.9999999 en représentation décimale. Si la taille du float n'est pas la même des deux côté, cela pourrait expliquer la différence de comportement.
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
lhommedumatch
On 25 mar, 12:43, JKB wrote:
Le 25-03-2009, ? propos de Division et arrondi, lhommedumatch ?crivait dans fr.comp.lang.c :
> J'ai ce programme: > #include <iostream> > #include <math.h>
> int main() > { > float x.0; > float y=1.0; > float scale=0.1; > int res;
> res = int (x/scale); > std::cout << res << std::endl; > return 0; > }
> Si je le compile avec: > version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) > sur une machine 32bits j'obtiens 99 > sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la t aille du float sur les deux architectures ? 0.1 ne peut être représenté par une su ite finie de bit (donc sa représentation n'est pas exacte). x/scale peut donc donner 99.9999999 en représentation décimale. Si la taille du fl oat n'est pas la même des deux côté, cela pourrait expliquer la diffé rence de comportement.
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2 % de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
sizeof float =4 sur les 2 plateformes.
(Si je change le scale par 0.01 j'obtiens 1000 sur les 2 plateformes)
On 25 mar, 12:43, JKB <knatsc...@koenigsberg.fr> wrote:
Le 25-03-2009, ? propos de
Division et arrondi,
lhommedumatch ?crivait dans fr.comp.lang.c :
> J'ai ce programme:
> #include <iostream>
> #include <math.h>
> int main()
> {
> float x=10.0;
> float y=1.0;
> float scale=0.1;
> int res;
> res = int (x/scale);
> std::cout << res << std::endl;
> return 0;
> }
> Si je le compile avec:
> version gcc 4.1.2 20071124 (Red Hat 4.1.2-42)
> sur une machine 32bits j'obtiens 99
> sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la t aille du float
sur les deux architectures ? 0.1 ne peut être représenté par une su ite
finie de bit (donc sa représentation n'est pas exacte). x/scale peut
donc donner 99.9999999 en représentation décimale. Si la taille du fl oat
n'est pas la même des deux côté, cela pourrait expliquer la diffé rence
de comportement.
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2 % de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
sizeof float =4 sur les 2 plateformes.
(Si je change le scale par 0.01 j'obtiens 1000 sur les 2 plateformes)
Le 25-03-2009, ? propos de Division et arrondi, lhommedumatch ?crivait dans fr.comp.lang.c :
> J'ai ce programme: > #include <iostream> > #include <math.h>
> int main() > { > float x.0; > float y=1.0; > float scale=0.1; > int res;
> res = int (x/scale); > std::cout << res << std::endl; > return 0; > }
> Si je le compile avec: > version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) > sur une machine 32bits j'obtiens 99 > sur une machine 64bits j'obtiens 100
Je vais peut-être dire une bêtise. Peut-on avoir la t aille du float sur les deux architectures ? 0.1 ne peut être représenté par une su ite finie de bit (donc sa représentation n'est pas exacte). x/scale peut donc donner 99.9999999 en représentation décimale. Si la taille du fl oat n'est pas la même des deux côté, cela pourrait expliquer la diffé rence de comportement.
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2 % de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
sizeof float =4 sur les 2 plateformes.
(Si je change le scale par 0.01 j'obtiens 1000 sur les 2 plateformes)
Marc Boyer
On 2009-03-25, lhommedumatch wrote:
J'ai ce programme: #include <iostream> #include <math.h>
int main() { float x.0; float y=1.0; float scale=0.1; int res;
res = int (x/scale); std::cout << res << std::endl; return 0; }
Si je le compile avec: version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) sur une machine 32bits j'obtiens 99 sur une machine 64bits j'obtiens 100
Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes du sujet avec un titre plus accrocheur.
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
On 2009-03-25, lhommedumatch <ludocluba@yahoo.com> wrote:
J'ai ce programme:
#include <iostream>
#include <math.h>
int main()
{
float x.0;
float y=1.0;
float scale=0.1;
int res;
res = int (x/scale);
std::cout << res << std::endl;
return 0;
}
Si je le compile avec:
version gcc 4.1.2 20071124 (Red Hat 4.1.2-42)
sur une machine 32bits j'obtiens 99
sur une machine 64bits j'obtiens 100
Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants...
En fait, il faudrait savoir quel niveau de réponse tu désires.
Soit tu es novice en calcul numérique, et le mieux qu'on puisse
te conseiller, c'est soit de renoncer à comprendre et d'accepter
que les flottants font des arrondis dépendant de pleins de
choses, soit de commencer à te documenter
http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes
du sujet avec un titre plus accrocheur.
Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
J'ai ce programme: #include <iostream> #include <math.h>
int main() { float x.0; float y=1.0; float scale=0.1; int res;
res = int (x/scale); std::cout << res << std::endl; return 0; }
Si je le compile avec: version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) sur une machine 32bits j'obtiens 99 sur une machine 64bits j'obtiens 100
Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes du sujet avec un titre plus accrocheur.
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
-ed-
On 25 mar, 12:14, lhommedumatch wrote:
J'ai ce programme: #include <iostream>
C'est pas du C. Le C++, c'est à coté.
On 25 mar, 12:14, lhommedumatch <ludocl...@yahoo.com> wrote:
> J'ai ce programme: > #include <iostream> > #include <math.h>
> int main() > { > float x.0; > float y=1.0; > float scale=0.1; > int res;
> res = int (x/scale); > std::cout << res << std::endl; > return 0; > }
> Si je le compile avec: > version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) > sur une machine 32bits j'obtiens 99 > sur une machine 64bits j'obtiens 100
> Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialis tes du sujet avec un titre plus accrocheur.
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
Ok merci pour cette réponse. La réponse ne tiendra pas en quelques lignes?
On 25 mar, 16:11, Marc Boyer <Marc.Bo...@cert.onera.fr.invalid> wrote:
On 2009-03-25, lhommedumatch <ludocl...@yahoo.com> wrote:
> J'ai ce programme:
> #include <iostream>
> #include <math.h>
> int main()
> {
> float x=10.0;
> float y=1.0;
> float scale=0.1;
> int res;
> res = int (x/scale);
> std::cout << res << std::endl;
> return 0;
> }
> Si je le compile avec:
> version gcc 4.1.2 20071124 (Red Hat 4.1.2-42)
> sur une machine 32bits j'obtiens 99
> sur une machine 64bits j'obtiens 100
> Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants...
En fait, il faudrait savoir quel niveau de réponse tu désires.
Soit tu es novice en calcul numérique, et le mieux qu'on puisse
te conseiller, c'est soit de renoncer à comprendre et d'accepter
que les flottants font des arrondis dépendant de pleins de
choses, soit de commencer à te documenter
http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialis tes
du sujet avec un titre plus accrocheur.
Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Ok merci pour cette réponse.
La réponse ne tiendra pas en quelques lignes?
> J'ai ce programme: > #include <iostream> > #include <math.h>
> int main() > { > float x.0; > float y=1.0; > float scale=0.1; > int res;
> res = int (x/scale); > std::cout << res << std::endl; > return 0; > }
> Si je le compile avec: > version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) > sur une machine 32bits j'obtiens 99 > sur une machine 64bits j'obtiens 100
> Quelqu'un pourrait m'éclairer.
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialis tes du sujet avec un titre plus accrocheur.
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
Ok merci pour cette réponse. La réponse ne tiendra pas en quelques lignes?
Eric Levenez
Le 25/03/09 18:50, dans , « lhommedumatch » a écrit :
La réponse ne tiendra pas en quelques lignes?
(int)0.99 égal 0 et pas 1.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 25/03/09 18:50, dans
<4e9c9ccf-f2e2-4650-be67-f409759a7804@33g2000yqm.googlegroups.com>,
« lhommedumatch » <ludocluba@yahoo.com> a écrit :
La réponse ne tiendra pas en quelques lignes?
(int)0.99 égal 0 et pas 1.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
J'ai ce programme: [...] float x.0; float scale=0.1; int res;
res = int (x/scale); [...] version gcc 4.1.2 20071124 (Red Hat 4.1.2-42) sur une machine 32bits j'obtiens 99 sur une machine 64bits j'obtiens 100
Essaye avec l'option "-ffloat-store", ça peut aider...
-- Jacques.
Jean-Marc Bourguet
lhommedumatch writes:
La réponse ne tiendra pas en quelques lignes?
En deux lignes: n'utilise pas les formats flottants si tu n'es pas pret a investir le temps necessaire pour les comprendre.
Et globalement, ce conseil est valable pour tout; mais les flottants sont particulierement piegeux parce qu'on est famillier avec les reels, et qu'on a tendance a extrapoler aux flottants des proprietes qu'ils n'ont pas parce que les reels les ont.
A+
-- Jean-Marc FAQ de fclc: http://www.levenez.com/lang/c/faq Site de usenet-fr: http://www.usenet-fr.news.eu.org
lhommedumatch <ludocluba@yahoo.com> writes:
La réponse ne tiendra pas en quelques lignes?
En deux lignes: n'utilise pas les formats flottants si tu n'es pas pret a
investir le temps necessaire pour les comprendre.
Et globalement, ce conseil est valable pour tout; mais les flottants sont
particulierement piegeux parce qu'on est famillier avec les reels, et qu'on
a tendance a extrapoler aux flottants des proprietes qu'ils n'ont pas parce
que les reels les ont.
A+
--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
En deux lignes: n'utilise pas les formats flottants si tu n'es pas pret a investir le temps necessaire pour les comprendre.
Et globalement, ce conseil est valable pour tout; mais les flottants sont particulierement piegeux parce qu'on est famillier avec les reels, et qu'on a tendance a extrapoler aux flottants des proprietes qu'ils n'ont pas parce que les reels les ont.
A+
-- Jean-Marc FAQ de fclc: http://www.levenez.com/lang/c/faq Site de usenet-fr: http://www.usenet-fr.news.eu.org
Marc Boyer
On 2009-03-25, lhommedumatch wrote:
On 25 mar, 16:11, Marc Boyer wrote:
On 2009-03-25, lhommedumatch wrote:
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes du sujet avec un titre plus accrocheur.
Marc Boyer
Ok merci pour cette réponse. La réponse ne tiendra pas en quelques lignes?
En quelques lignes, on peut dire que les nombre flottant représentent mal les puissances de 10 (puisqu'ils représentent les nombres en puissance de deux), et que pleins de gens surement très intelligents travaillent pour que les arrondis se fassent "au mieux" tout en restant efficace.
Quand on est pas un spécialiste, on s'en tient à quelques règles comme "toujours comparer les flottants avec une marge d'erreur" (en ne confondant pas erreur relative et absolule), "ne pas convertir les flottant en entier", et "si c'est important, appeller un spécialiste". Le grand classique, c'est la facture ou la somme du montant HT et de la TVA ne donne pas le montant TTC...
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
On 2009-03-25, lhommedumatch <ludocluba@yahoo.com> wrote:
On 25 mar, 16:11, Marc Boyer <Marc.Bo...@cert.onera.fr.invalid> wrote:
On 2009-03-25, lhommedumatch <ludocl...@yahoo.com> wrote:
Bienvenu dans le monde des nombres flottants...
En fait, il faudrait savoir quel niveau de réponse tu désires.
Soit tu es novice en calcul numérique, et le mieux qu'on puisse
te conseiller, c'est soit de renoncer à comprendre et d'accepter
que les flottants font des arrondis dépendant de pleins de
choses, soit de commencer à te documenter
http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes
du sujet avec un titre plus accrocheur.
Marc Boyer
Ok merci pour cette réponse.
La réponse ne tiendra pas en quelques lignes?
En quelques lignes, on peut dire que les nombre flottant représentent
mal les puissances de 10 (puisqu'ils représentent les nombres en puissance
de deux), et que pleins de gens surement très intelligents travaillent pour
que les arrondis se fassent "au mieux" tout en restant efficace.
Quand on est pas un spécialiste, on s'en tient à quelques règles
comme "toujours comparer les flottants avec une marge d'erreur"
(en ne confondant pas erreur relative et absolule), "ne pas
convertir les flottant en entier", et "si c'est important, appeller
un spécialiste".
Le grand classique, c'est la facture ou la somme du montant HT
et de la TVA ne donne pas le montant TTC...
Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Bienvenu dans le monde des nombres flottants... En fait, il faudrait savoir quel niveau de réponse tu désires. Soit tu es novice en calcul numérique, et le mieux qu'on puisse te conseiller, c'est soit de renoncer à comprendre et d'accepter que les flottants font des arrondis dépendant de pleins de choses, soit de commencer à te documenter http://www.validlab.com/goldberg/
Soit tu sais déjà tout ça, et essaye d'appater quelques spécialistes du sujet avec un titre plus accrocheur.
Marc Boyer
Ok merci pour cette réponse. La réponse ne tiendra pas en quelques lignes?
En quelques lignes, on peut dire que les nombre flottant représentent mal les puissances de 10 (puisqu'ils représentent les nombres en puissance de deux), et que pleins de gens surement très intelligents travaillent pour que les arrondis se fassent "au mieux" tout en restant efficace.
Quand on est pas un spécialiste, on s'en tient à quelques règles comme "toujours comparer les flottants avec une marge d'erreur" (en ne confondant pas erreur relative et absolule), "ne pas convertir les flottant en entier", et "si c'est important, appeller un spécialiste". Le grand classique, c'est la facture ou la somme du montant HT et de la TVA ne donne pas le montant TTC...
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
Vincent Lefevre
Dans l'article , lhommedumatch écrit:
sizeof float =4 sur les 2 plateformes.
Même si la taille est la même, il est possible que les calculs se fassent dans une plus grande précision. En particulier,