IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Déterminer si le résultat d'une division est un nombre décimal ou rationnel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Par défaut Déterminer si le résultat d'une division est un nombre décimal ou rationnel
    Bonjour,

    J'ai besoin d'effectuer une vérification sur le résultat d'une division. Est-ce que le résultat est un nombre décimal ou un nombre rationnel.
    Sachant que ce test sera fait de nombreuses fois, une solution optimale et rapide dans l'exécution serait la bienvenue.

    Pour le moment je n'ai trouvé qu'à comparer le résultat avec un math.round(resultat,15).
    C'est correct mais pas parfait.

    Si vous avez mieux je suis preneur

    Merci

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Directement dans VB ou le Framework, je ne sais pas trop. Ceci étant dit, il existe de nombreuses bibliothèques numériques (des gratuites (Accord.net, AForge.net Craig Utilities etc), et des payantes) compatibles avec VB.net. Une bonne place pour commencer c'est NuGet

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Muthos34 Voir le message
    Bonjour,

    J'ai besoin d'effectuer une vérification sur le résultat d'une division. Est-ce que le résultat est un nombre décimal ou un nombre rationnel.
    Sachant que ce test sera fait de nombreuses fois, une solution optimale et rapide dans l'exécution serait la bienvenue.

    Pour le moment je n'ai trouvé qu'à comparer le résultat avec un math.round(resultat,15).
    C'est correct mais pas parfait.

    Si vous avez mieux je suis preneur

    Merci
    Pourquoi faire un Round sur 15 décimales ?

    Et même si c'est pas forcément ce qu'il y a de plus rapide, caster en INT devrait être plus rapide que le Round je pense.

    Sinon, si tes deux opérandes sont des entiers, le plus simple est de faire le dividende modulo le diviseur et vérifier que c'est 0.
    Ce sera ce qu'il y a de plus rapide à mon avis.

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Par défaut
    Merci clementmarcotte, je regarderai ça.


    StringBuilder.
    Je ne cherche pas à savoir si le résultat de la division est un nombre entier mais si c'est un nombre décimal ou un nombre rationnel.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Oups, en effet, je me suis gourré

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Je n'ai pas la solution, mais le code suivant satisferait si on travaille avec des Single, mais pas avec des Double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim N As Single
            Dim D As Single
            Dim R As Single
            '   Dim N As Double
            '   Dim D As Double
            '   Dim R As Double
            N = 3         ' N = 2
            D = 2         ' D = 3
            R = N / D     ' 3/2 ==> Decimal   et  2/3 ==> Rationnel
            If R * D = N Then
                MessageBox.Show("Decimal")
            Else
                MessageBox.Show("Rationnel")
            End If
    J'espère que ça te donnera une piste ...

  7. #7
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    Bonsoir,

    Si on appelle (p/q) la fraction F à considérer (nombre rationnel), on peut prouver que F est décimal si le dénominateur q est décomposable en facteurs premiers du type 2^n et 5ˆm.
    Si le dénominateur q ne peut être réduit à cette forme, F sera une fraction rationnelle non décimale.
    Voici un bout de code pour décomposer q en facteurs premiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Private Function FindFactors(ByVal num As Long) As List(Of Long)
        Dim result As List(Of Long) = New List(Of Long)()
        Do While (num Mod 2 = 0)    ' Take out the 2s.
            result.Add(2)
            num \= 2
        Loop
        Dim factor As Long = 3     ' Take out other primes.
        Do While factor * factor <= num
            If num Mod factor = 0 Then             ' This is a factor.
                result.Add(factor)
                num \= factor
            Else           ' Go to the next odd number.
                factor += 2
            End If
        Loop
        ' If num is not 1, then whatever is left is prime.
        If num > 1 Then result.Add(num)
        Return result
    End Function

  8. #8
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Tous les flottants (single et double) sont en fait des nombres décimaux ...
    Cela vient du fait qu'ils sont représentés sous forme de exposant binaire base 2 & mantisse binaire et ...FINIE !!!
    Tu peux t'en convaincre en tentant d’écrire 3.1416 sous forme exposant base 10 & de mantisse décimale :
    -PI=3.1416
    -PI=314.16 x 10-2
    -PI=3141.6x10-3
    -PI=31416x10-4

    Meme les nombres "rationnels" (fractions irréductibles) et les nombres "non rationnels" ou "irrationnels" (pi,racine carrée,base e ) ne sont que des approximations décimales...
    bon code...

  9. #9
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    Voici un petit projet VB.NET avec soit la décomposition complète du dénominateur en facteurs premiers soit le raccourci plus simple consistant à chercher si il existe des facteurs autres que 2 et 5.
    RationalDecimal.zip

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Function RemoveTwosAndFives(num As Integer) As Integer
            Do While num Mod 2 = 0
                num \= 2
            Loop
            Do While num Mod 5 = 0
                num \= 5
            Loop
            Return num
        End Function

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/12/2015, 20h24
  2. [SQL] Déterminer si le résultat d'une requête est vide ou non
    Par khamett dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2008, 21h53
  3. Résultat d'une division
    Par Sakapatate dans le forum Langage
    Réponses: 5
    Dernier message: 01/06/2007, 20h06
  4. tester si le résultat d'une requete est vide
    Par monstour dans le forum ASP
    Réponses: 13
    Dernier message: 04/10/2006, 14h14
  5. Réponses: 19
    Dernier message: 26/01/2005, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo