Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Discussion: Calcul en java

  1. #1
    Invité régulier
    Inscrit en
    avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 28
    Points : 9
    Points
    9

    Par défaut Calcul en java

    Bonjour je rencontre un petit problème que je ne sais résoudre ...

    Context :
    Je fais du calcul à l'aide de matrice (Programmation dynamique).

    Je souhaite utiliser le type primitif int et lors du calcul des valeurs des cellules de mes matrices je suis amener a faire des calculs du type :

    Valeur d'une cellule * constante

    Or lors de l'initialisation de mes matrices certaines cellules ont la valeur Integer.MIN_VALUE;

    Problème
    J'ai remarqué un comportement gênant qui peut être mis en avant par l'exemple ci-dessous :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		int x,y,z;
    		x = Integer.MIN_VALUE;
    		y = Integer.MIN_VALUE - 1;
    		z = Integer.MIN_VALUE - 2;
     
    		System.out.println(x+"\n"+y+"\n"+z);
     
    		//Resultat
    		// -2147483648
    		// 2147483647
    		// 2147483646
    Je souhaite conserver l'utilisation des int par soucis de performance (multiples grosses matrices), une solution pour pallier à ce problème ?
    En vous souhaitant une bonne fin de journée, merci d'avance.

  2. #2
    Expert Confirmé Sénior
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    novembre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2005
    Messages : 2 711
    Points : 6 304
    Points
    6 304

    Par défaut

    Je pense pas qu'il soit possible de faire grand chose hormis éviter de provoquer un dépassement.

  3. #3
    Membre confirmé
    Inscrit en
    juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 570
    Points : 278
    Points
    278

    Par défaut

    Tu voudrais que ca fasse quoi, que ca reste à MIN_VALUE ?

  4. #4
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 554
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 554
    Points : 4 068
    Points
    4 068

    Par défaut

    Bie,

    Il est pour le moins curieux de vouloir faire
    Code :
    		y = Integer.MIN_VALUE - 1;
    et de s'étonner ensuite d'un comportement "inattendu" (alors que bien entendu, ce comportement est parfaitement prévisible).

    C'est un peu comme si tu voulais qu'un récipient sois plus vide que vide (sauf que le récipient ne va pas se remplir ).
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  5. #5
    Invité régulier
    Inscrit en
    avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 28
    Points : 9
    Points
    9

    Par défaut

    Sauf que les récipient ne va pas se remplir... passons

    Pour ce qui est du pourquoi, imagine une fonction générique qui a pour but de renseigner les valeurs de chacune des cellules de mes matrices. Imagine ensuite une initialisation de certaines cellules à une valeur minimale, de façon à ce que lors d'une phase de backtracking on puisse éviter de définir un chemin comme passant par certaines cellules (en recherchant le max des valeurs lors de chaque déplacement).
    L'algorithme de NeedleMan & Wunsch sous fonction affine nécessite la mise en place d'une telle approche si l'on part dans une optique de maximisation de score (alignement de séquences).

    Résumons, avant la modification de la valeur d'une cellule faut-il que je m'assure que la valeur de la cellule à partir de laquelle je me base ne soit pas égale à la valeur Min (ajout d'une conditionnelle...) ou existe il une alternative pour le type int primitif.

    A noter que ce problème n'est pas rencontré lors de l'utilisation du type double primitif.

    Merci pour vos réponses.

  6. #6
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 055
    Points : 5 974
    Points
    5 974

    Par défaut

    Détecter a postériori un dépassement sur une soustraction est facile.
    La question est: que veux tu faire lorsque cela arrive, vu que tu ne peux pas avoir plus petit que Integer.MIN_VALUE?

  7. #7
    Membre Expert
    Avatar de Deadpool
    Homme Profil pro David
    Inscrit en
    novembre 2005
    Messages
    1 284
    Détails du profil
    Informations personnelles :
    Nom : Homme David
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2005
    Messages : 1 284
    Points : 1 667
    Points
    1 667

    Par défaut

    Citation Envoyé par Vantrax Voir le message
    Sauf que les récipient ne va pas se remplir... passons

    Pour ce qui est du pourquoi, imagine une fonction générique qui a pour but de renseigner les valeurs de chacune des cellules de mes matrices. Imagine ensuite une initialisation de certaines cellules à une valeur minimale, de façon à ce que lors d'une phase de backtracking on puisse éviter de définir un chemin comme passant par certaines cellules (en recherchant le max des valeurs lors de chaque déplacement).
    L'algorithme de NeedleMan & Wunsch sous fonction affine nécessite la mise en place d'une telle approche si l'on part dans une optique de maximisation de score (alignement de séquences).

    Résumons, avant la modification de la valeur d'une cellule faut-il que je m'assure que la valeur de la cellule à partir de laquelle je me base ne soit pas égale à la valeur Min (ajout d'une conditionnelle...) ou existe il une alternative pour le type int primitif.

    A noter que ce problème n'est pas rencontré lors de l'utilisation du type double primitif.

    Merci pour vos réponses.
    Malheureusement je crois que tu n'as pas le choix, les overflows numériques n'étant pas vérifiés en Java.
    “THERE IS NO JUSTICE. THERE’S JUST ME!”

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •