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 :

variable type double


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 148
    Points : 184
    Points
    184
    Par défaut variable type double
    Dans le cadre de calcules stat je suis en train de travailler sur des factorielles.


    En utilisant le type double de vb.net je peux faire 170!
    Avec le type extended de delphi je peux aller au dela de 1000!


    Est ce qu'il y a un moyen pour pouvoir faire des factorielles de 1000 ou plus ?? (méthodes ou types ou ??).

  2. #2
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bonjour,

    Le type Decimal est peut être le type le plus approprié pour ce que tu veux faire.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 148
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Kelpan Voir le message
    Bonjour,

    Le type Decimal est peut être le type le plus approprié pour ce que tu veux faire.
    Avec le type Decimal, je peux faire 26! et bug à 27!

  4. #4
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Comment procèdes-tu exactement ? Tu peux en dire plus ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 148
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Kelpan Voir le message
    Comment procèdes-tu exactement ? Tu peux en dire plus ?

    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
    21
    22
    23
    24
    25
    26
     
     
    -------------------
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim tmpe, tmpa As Double
            If IsNumeric(Me.TextBox1.Text) = False Then Exit Sub
            tmpa = System.Convert.ToDouble(Me.TextBox1.Text)
            tmpe = Factorielle(tmpa)
            MsgBox(tmpe.ToString)
     
        End Sub
     
    -------------------
     
        Function Factorielle(ByVal N As Long) As Double
            Dim i, Resultat As Double
            Resultat = 1
            For i = 1 To N
                Resultat = i * Resultat
            Next i
            Return Resultat
        End Function
     
    -------------------
    Avec ce code, je ne peux calculer les factorielles de nombre N > 170.

  6. #6
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Le type decimal ne se comporte pas comme le type double en ce qui concerne les exposants... donc oui, en effet ça ne va pas.

    A ma connaissance, il n'y a pas de type à virgule flottante plus grand que le decimal.

    Tu peux essayer de passer par le type String qui te permettrait de na pas avoir de limite.
    Je crois bien avoir déjà vu des algos pour additionner/soustraire/diviers et multiplier 2 valeurs de type String.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 148
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Kelpan Voir le message
    ...
    Je crois bien avoir déjà vu des algos pour additionner/soustraire/diviers et multiplier 2 valeurs de type String.
    Ah oui cela pourrait bien m'aider.

  8. #8
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    J'ai trouvé ceci sur le net

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    Function Factorielle(ByVal N As Long) As String
        'définitions des variables
        Dim R(100000) As Double, S As Double
        Dim K As Long, M As Long, MAX As Long
        Dim E4 As Long, E5 As Long
        Dim L As Long, L1 As Long
        Dim RET As Long, B As Long, C2 As Long
        Dim C1 As Double, B2 As Double, C As Double
        Dim t As Long
        Dim ef As String
     
        'initialisation des variables
        R(1) = 0.00001
        M = 2
        MAX = 1
        E5 = 100000
        E4 = 10000
     
        Do While M <= N
    DebutWhile:
            S = R(K)
            B = Int(S)
            C = (RET + Int(E5 * (S - B) + 0.5) * M) / E5
            C2 = Int(C)
            C1 = Int(E5 * (C - C2) + 0.5) / E5
            B2 = B * M + C2
     
            If B2 >= E4 Then
                'deuxième série
                B2 = B2 / E4
                RET = Int(B2)
                R(K) = Int(0.5 + (B2 - RET) * E4) + C1
                K = K + 1
                If K <= MAX Then GoTo DebutWhile
                R(K) = RET / E5
                MAX = MAX + 1
                If MAX > 10000 Then End
                GoTo Increm
            End If
     
            R(K) = B2 + C1
            RET = 0
            If K <> MAX Then K = K + 1 : GoTo DebutWhile
     
    Increm:
            'incrémentation de M; fin de la 'multiplication'
            M = M + 1
            K = 1
            RET = 0
        Loop
     
        For t = MAX To 1 Step -1
            S = Int(0.5 + R(t) * E5)
            If S = 0 Then
                L = 8
            Else
                L = 8 - Int(Math.Log(S + 0.5) / Math.Log(10))
                If L = 0 Or t = MAX Then GoTo CreateString
            End If
     
            ef = ef & "".PadLeft(L, "0")
     
    CreateString:
            ef = ef & S.ToString
        Next t
     
        Return ef
    End Function
    Ce programmeur à développer un algo assez rapide qui a le mérite d'être interessant (un peu complexe, d'ailleurs) pour calculer les factorielles.

    Par contre, va falloir fignoler un peu le codage car c'est pas très propre et il est possible d'optimiser.

    bon courage.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 148
    Points : 184
    Points
    184
    Par défaut
    Cet algorithme marche bien et rend le resultat en string.
    Reste le problème d'utiliser ce resultat dans d'autres calculs.

    Et dans ce cas il faut créer d'autres algorithmes pour string ( division, multilication, log, etc, prise en charge des parenthèse, et autres ) .

    Merci pour ton aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/08/2010, 22h13
  2. Probléme variable type double
    Par Pierre005 dans le forum Débuter
    Réponses: 5
    Dernier message: 02/12/2009, 15h10
  3. Réponses: 15
    Dernier message: 10/05/2007, 13h36
  4. problème d'overflow avec variable type double
    Par ben83 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 15/02/2007, 09h55
  5. Variable de type double
    Par Linaa dans le forum C
    Réponses: 16
    Dernier message: 21/01/2006, 13h04

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