Taur33
Messages postés85Date d'inscriptionvendredi 24 septembre 2010StatutMembreDernière intervention20 mai 2011
-
17 déc. 2010 à 13:11
CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 2018
-
18 déc. 2010 à 15:14
Bonjour à tous
Voilà je voudrais précalculer les puissances de 2 jusqu'à 10000 pour accélérer ma
fonction (Dectobinaire(nombre as string)as string)donc les écrire dans un fichier
Cependant je doute quand à la façon dont je m'y prends (taille du fichier ~14 Mo,lecture des puissances).(Voir code)
Je souhaiterais aussi partager les calculs des puissances mais là je ne vois pas comment faire.
Voici mon code:
Private Sub ButtonCALCULER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCALCULER.Click
Dim br As BinaryReader
Dim bw As BinaryWriter
Dim fs As FileStream
Dim i As Integer
Dim A As String = "2"
Dim Chaine As String = ""
Dim R As String
Me.Cursor = Cursors.WaitCursor
Try
' création du fichier
bw = New BinaryWriter(File.Create("POW2.txt"))
' calcul puissance et écriture dans le fichier
' on multiplie la puissance précédente par 2
' sauf quand i vaut "0" (2^0=1)
For i = 0 To 10000
If i = 0 Then
R = 1
Chaine = R
bw.Write(Chaine & vbCrLf)
Else : R = Chaine
Chaine = Karatsuba(R, 2)
bw.Write(Chaine & vbCrLf)
End If
Next
bw.Close()
'Ouverture du fichier et Ecriture du contenu du fichier dans un RichTextBox
'fs = File.Open("POW2.txt", FileMode.Open)
'br = New BinaryReader(fs)
'While fs.Position < fs.Length
'RichTextBox1.Text = RichTextBox1.Text & br.ReadString
'End While
Finally
'Fermeture Binaryreader
If Not IsNothing(br) Then br.Close()
'Fermeture Binarywriter
If Not IsNothing(bw) Then bw.Close()
End Try
Me.Cursor = Cursors.Default
End Sub
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 17 déc. 2010 à 13:30
Bonjour,
Il existe 1 manière pour convertir une une valeur simplement :
Dim lValueToConvert as integer
Dim lValueConverted as string=""
Do while lValueToConvert>0
lValueConverted=(lValueToConvert mod 2).ToString+lValueConverted
lValueToConvert\=2 ' Note bien le \ et pas /
loop
'Résultat dans lValueConverted
Après, compter jusqu'à 10000 bits, ça fait beaucoup, seul un format Double (à vérifier) peut contenir une telle valeur, donc peu de précision.
Je pense que ton problème est à repenser pour comprendre pourquoi tu as besoin de tant de valeur que ça.
En effet mais je travaille avec des strings donc ma variable chaine contient la valeur exacte (sans écriture avec exp).
Avec math.pow j'aurais donc une limitation.
Je pense que ton problème est à repenser pour comprendre pourquoi tu as besoin de tant de valeur que ça.
pour accélérer ma fonction (Dectobinaire(nombre as string)as string) c'est à dire donner la représentation binaire d'un décimal.
Pour cela il faut trouver la puissance de 2 immédiatemment < à nombre.
Vous ne me dites pas cependant si la lecture et l'écriture sont bien faites en mode
binaire(ce dont je doute dans mon code)
Taur33
Messages postés85Date d'inscriptionvendredi 24 septembre 2010StatutMembreDernière intervention20 mai 2011 18 déc. 2010 à 15:08
En fait ça fonctionne (certes + de 4 heures pour créér le fichier)
Peut-etre qu'en faisant les calculs sur plusieurs threads cela diminuerait le
temps d'écriture du fichier?
Mais je ne sais pas faire.
En tous cas merci nhervagault et NHenry de m'avoir répondu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 20181 18 déc. 2010 à 15:14
Dim Entier As Integer = 4
Dim binaryVal As String = Convert.ToString(entier, 2)
' 2 represente une base binaire
' Cette fonction converti un entier en binaire : 4 en 100
Peut elle être adapté au décimal en travaillant avec la virgule ?