Si RacineCherche > 1 (si non mon algo ne fonctionneras pas ^^)
Inf = 1
Sup = 1
Temps que Sup * Sup RacineCherche alors
Sup = Sup - (Sup - Inf) / 2
Sinon
OK = Inf
Inf = Sup
Sup = Sup + (Sup - OK) / 2
OK = 0
Fin si
Fin temps que
Le résultat se trouve dans OK
Polack77 a écrit::doute: Heeeee ok, mais alors comment faire pour passé de 3 à 22/7 puis à 333/106 ext ???
erreur = 100
n_max = 0
d_max = 0
Pour tout n jusqu'à 999 999 999:
Pour tout d jusqu'à 999 999:
a = n/d;
erreur_tmp = abs(a-monReel)
si erreur_tmp < erreur alors
n_max = n
d_max = d
erreur = erreur_tmp
fin
fin
Afficher n_max
Afficher d_max
Dim ecart As Double
Dim util As Long
Dim nominateurCourant As Long
Dim denominateurCourant As Long
Dim denominateurOk As Long
Dim nominateurOk As Double
Dim nominateurOkAvContraintes As Double
Dim varRech As Double
Dim delta As Double
Dim delta1 As Double
Dim delta2 As Double
Dim Pressision As Long
Dim nominateurMax As Long
Dim denominateurMax As Long
nominateurMax = 99999999
denominateurMax = 999999
Pressision = 99999999
varRech = 0.123456789
ecart = 1
For denominateurCourant = 1 To Pressision
nominateurCourant = Int(varRech * denominateurCourant)
delta1 = varRech - nominateurCourant / denominateurCourant
delta2 = (nominateurCourant + 1) / denominateurCourant - varRech
If delta1 < delta2 Then
delta = delta1
util = 1
Else
delta = delta2
util = -1
End If
If delta < ecart Then
nominateurOkAvContraintes = nominateurCourant + (1 - util) / 2
If nominateurOkAvContraintes <= nominateurMax And denominateurCourant <= denominateurMax Then
ecart = delta
denominateurOk = denominateurCourant
nominateurOk = nominateurOkAvContraintes
End If
End If
Next
Debug.Print "meilleur résultat jusqu'à d=" & Pressision
Debug.Print nominateurOk & " / " & denominateurOk & " = " & nominateurOk / denominateurOk
Debug.Print "Ecrat : " & ecart
Sinon, tu peux estimer le réel comme un rationnel proche dont la longueur de la séquence décimale est 6. ça devrait donner une approxim assez fiable et facile à calculer.
Polack77 a écrit:Bonjour nodjim
Heeee comment fait-on une citation sur ce fofo svp ?
ampholyte a écrit:Utilise la balise sans l'espace dans la première balise.
Sinon tu peux faire répondre en dessous du poste d'une personne.
ampholyte a écrit:As-tu une précision recherchée précise ? (centième près, millième près, millionième près ?) Ou est-ce un paramètre de ta fonction ?
ampholyte a écrit:(Je vais essayer de mon côté)
Polack77 a écrit:Oui, c'est bien pour ça que je veux ajouter la notion décart acceptable pour ne pas prolonger le calcul inutilement.
Le problème est que mes réels d'entrés peuvent aussi bien être "très" important comme "très" petit. Le maximum et le minimum de ces valeurs ont été imposé par moi.
nodjim a écrit:Attention, je déconseille formellement de retravailler avec ce rationnel approximatif pour reconstituer le nombre réel. On va droit dans le mur avec cette méthode...
Dlzlogic a écrit:Bonjour,
Je ne sais pas si ça peut servir, mais je vais donner un exemple.
Mon logiciel travaille sur des données très grandes, 6 chiffres avant la virgule, et normalement 3 chiffres après.
Je fais une première étape qui consiste à faire un changement de variable, une translation, pour avoir des valeurs plus petites.
En fait, je veux me limiter à 7 chiffres significatifs, ce qui correspond à un float en C.
Là j'avais 2 choix, soit travailler en float, soit travailler en long, le nombre de décimales est conservé, je profitais donc des 2 chiffres supplémentaires de la caractéristique.
J'ai bien réfléchi une quinzaines de jours avant de me décider, et le résultats est tout à fait satisfaisant.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :