effectifs negatifs après migration
les effectifs d'une de mes zones de départ se retrouvent négatifs après migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0). Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone.getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone.getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone.getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone.getName())){ return 0.02; }else return 0; }else if(y == 1){... etc la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
La valeur négative est toujours la même ? Elle est de combien ? Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
les effectifs d'une de mes zones de départ se retrouvent négatifs après migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0).
Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone.getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone.getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone.getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone.getName())){ return 0.02; }else return 0; }else if(y == 1){... etc
la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
non elle change avec le temps elle diminue avec la mortalité naturelle (c est ca qui est beau) ! tu penses à quoi ? ca commence a -1.08e-9 c est faible d ou mon interrogation sur les arrondis... mais comme la migration se fait par une multiplcation de matrice je vois mal comment ca peut générer des nombres negatifs ... MatrixND tmp2 = tmp0.mult(tmp1); tu as une idée ? merci Le 18 février 2014 10:27, <Loic.Gasche@ifremer.fr> a écrit :
La valeur négative est toujours la même ? Elle est de combien ?
Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
les effectifs d'une de mes zones de départ se retrouvent négatifs après
migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0).
Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone.getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone.getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone.getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone.getName())){ return 0.02; }else return 0; }else if(y == 1){... etc
la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
De mémoire on a déjà vu cela par le passé et c'était effectivement une question d'arrondi et de conversion de type (float-double) si je me souviens bien, à voir si c'est similaire. Cf : http://list.isis-fish.org/pipermail/isis-fish-users/2011-July/002335.html http://list.isis-fish.org/pipermail/isis-fish-users/2011-October/002383.html http://list.isis-fish.org/pipermail/isis-fish-users/2011-July/002330.html Le 18 février 2014 11:29, Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
non elle change avec le temps elle diminue avec la mortalité naturelle (c est ca qui est beau) ! tu penses à quoi ? ca commence a -1.08e-9 c est faible d ou mon interrogation sur les arrondis...
mais comme la migration se fait par une multiplcation de matrice je vois mal comment ca peut générer des nombres negatifs ... MatrixND tmp2 = tmp0.mult(tmp1); tu as une idée ? merci
Le 18 février 2014 10:27, <Loic.Gasche@ifremer.fr> a écrit :
La valeur négative est toujours la même ? Elle est de combien ?
Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
les effectifs d'une de mes zones de départ se retrouvent négatifs après
migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0).
Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone. getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone. getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone. getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone. getName())){ return 0.02; }else return 0; }else if(y == 1){... etc
la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Non pas spécialement d'idée pour le moment, c'était pour essayer de mieux cerner le problème. Avec une valeur si proche de 0 j'aurais pensé comme toi à des arrondis. Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
non elle change avec le temps elle diminue avec la mortalité naturelle (c est ca qui est beau) ! tu penses à quoi ? ca commence a -1.08e-9 c est faible d ou mon interrogation sur les arrondis...
mais comme la migration se fait par une multiplcation de matrice je vois mal comment ca peut générer des nombres negatifs ... MatrixND tmp2 = tmp0.mult(tmp1); tu as une idée ? merci
Le 18 février 2014 10:27, <Loic.Gasche@ifremer.fr> a écrit :
La valeur négative est toujours la même ? Elle est de combien ?
Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
les effectifs d'une de mes zones de départ se retrouvent négatifs après
migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0).
Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone.getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone.getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone.getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone.getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone.getName())){ return 0.02; }else return 0; }else if(y == 1){... etc
la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
(Hey ! Salut Benoit !! (savais pas que t'étais encore là!) ) Yep vous avez raison, c'est des arrondis cf print de la matrice dans les logs en pj mais ca ne le fait pas a chaque fois... comment ca se fait? Eric, comment je fais pour le forcer à utiliser 0.3 quand j'écris 0.3 et pas 0.29999999999999993 ? Merci ! Le 18 février 2014 11:38, <Loic.Gasche@ifremer.fr> a écrit :
Non pas spécialement d'idée pour le moment, c'était pour essayer de mieux cerner le problème.
Avec une valeur si proche de 0 j'aurais pensé comme toi à des arrondis.
Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
non elle change avec le temps elle diminue avec la mortalité naturelle (c
est ca qui est beau) ! tu penses à quoi ? ca commence a -1.08e-9 c est faible d ou mon interrogation sur les arrondis...
mais comme la migration se fait par une multiplcation de matrice je vois mal comment ca peut générer des nombres negatifs ... MatrixND tmp2 = tmp0.mult(tmp1); tu as une idée ? merci
Le 18 février 2014 10:27, <Loic.Gasche@ifremer.fr> a écrit :
La valeur négative est toujours la même ? Elle est de combien ?
Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
les effectifs d'une de mes zones de départ se retrouvent négatifs après
migration alors que la somme des coefficients est 1 et qu'elle devrait donc etre vide (à 0).
Est ce que ca peut venir d'arrondis ? ou ai-je fait une erreur dans mon equation? la voici: int y = context.getSimulationControl().getStep().getYear(); if(y == 0){ if(group.getAge() > 2 && "30F1".equals(arrivalZone.getName())){ return 0.3; }else if(group.getAge() > 2 && "30F0".equals(arrivalZone. getName())){ return 0.41; }else if(group.getAge() > 2 && "29F1".equals(arrivalZone. getName())){ return 0.13; }else if(group.getAge() > 2 && "28F0".equals(arrivalZone. getName())){ return 0.06; }else if(group.getAge() > 2 && "28E8".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "28E9".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "29E9".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "29F0".equals(arrivalZone. getName())){ return 0.02; }else if(group.getAge() > 2 && "27E9".equals(arrivalZone. getName())){ return 0.02; }else return 0; }else if(y == 1){... etc
la zone en négatif est Sole_nurs, elle ne recoit aucun poisson lors de la migration mais se vide. Merci!
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 18/02/2014 12:13, Sigrid Lehuta a écrit :
(Hey ! Salut Benoit !! (savais pas que t'étais encore là!) )
Yep vous avez raison, c'est des arrondis cf print de la matrice dans les logs en pj mais ca ne le fait pas a chaque fois... comment ca se fait? Eric, comment je fais pour le forcer à utiliser 0.3 quand j'écris 0.3 et pas 0.29999999999999993 ? C'est un problème informatique qui gène énormément les calculs scientifiques.
En java, certains nombres ne sont pas "informatiquement représentable" en double précision, donc java stock la valeur double qui s'en approche le plus. Mais je suis d'accord que cette infime arrondit, peut à force, produire un gros décalage. -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
participants (4)
-
Benoit Archambault -
Eric Chatellier -
Loic.Gasche@ifremer.fr -
Sigrid Lehuta