Trouver période de la décimale d'un nombre
Résolu/Ferméyg_be Messages postés 23397 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 - 28 sept. 2023 à 08:16
- Trouver période de la décimale d'un nombre
- Trouver adresse mac - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Trouver un numéro de portable avec un nom ✓ - Forum Mobile
- Trouver un lieu avec coordonnées gps - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
11 réponses
Modifié le 26 sept. 2023 à 11:04
Pour transformer en fraction:
Public Function frak(x As Double) As String Const mini As Double = 1 / 1000000000# Dim i As Integer, t As Double, numer As Long, tt As Double frak = "?" For i = 1 To 1000 t = x * i numer = Int(Round(t)) If numer >= 1 Then tt = t / numer If Abs(tt - 1) < mini Then frak = Str(numer) If i > 1 Then frak = frak + " / " + Str(i) End If Exit For End If End If Next i End Function
25 sept. 2023 à 19:29
Réponse pour le modérateur.
Cela me fait plaisir que vous me preniez pour un étudiant mais j’ai 63 ans révolus.
J’ai fait une simulation en VBA sur Excel d’un module Transmittance (filtre passe bas d'ordre 1 et dérivée) qui nécessite environ 5000 calculs pour obtenir la courbe du signal de sortie qui donnent, pour la plupart des résultats à virgule. Pour une raison de simplification de l’affichage, je voudrais convertir certains de ces décimaux en nombres fractionnaires (les points remarquables de la courbe).
Si le nombre décimal contient une série périodique qui se répète à l’infini, il faut connaitre cette série pour pouvoir la supprimer et convertir le nombre en fraction. D’où ma question.
J’ai déjà essayé plusieurs solutions qui n’ont pas aboutis et que j’ai effacé. Je demande éventuellement de nouveaux axes de recherche. Mais bien sûr si quelqu’un a une solution toute faite, je suis aussi preneur.
Cordialement
Modifié le 25 sept. 2023 à 21:06
bonjour,
étudiant ou pas, il est nécessaire de contribuer soi-même afin de progresser. Que ce soit un exercice scolaire ou un défi personnel. Dommage que tu ne décrives pas ce que tu as essayé et effacé, nous aurions pu mieux te guider.
En réalité, il n'est pas possible de convertir ainsi en fraction un nombre dont on ne connait que quelques décimales. Le concept même de "qui se répète à l’infini" n'a pas de sens quand tu ne connais que quelques décimales.
Par exemple, avec le nombre 0,133333333, on n'a aucune information qui indique ce que seront les décimales suivantes.
Si tu te contentes de chercher une séquence répétitive dans les quelques décimales connues, je suggère de traiter la représentation décimale comme un texte, et de chercher si le groupe des N dernières lettres se répètent (ou épuisent le texte), pour le N le plus petit possible. Cela te donnera le résultat recherché pour tes 3 exemples.
Exemple avec 3,245245245:
- tu prends le dernier chiffre, 5 et tu constates qu'il ne se répète pas
- tu prends les deux derniers chiffres, 45, et ils ne se répètent pas
- tu prends les trois derniers chiffres, 245, et ils se répètent, c'est ta solution
25 sept. 2023 à 21:15
le dernier chiffre étant parfois arrondi, je n'en tiendrais pas compte si il est plus grand que 5.
25 sept. 2023 à 21:37
Si tu "espères" qu'un nombre est une fraction pour pouvoir en simplifier l'affichage, n'est-il pas plus simple de le multiplier par les dénominateurs recherchés, et de vérifier que le produit est presque un entier?
Suivant ce que tu considères comme un dénominateur utile, tu pourrais multiplier par tous les entiers de 2 à 10000, et vérifier si le produit convient comme numérateur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question25 sept. 2023 à 21:26
Réponse pour le modérateur.
Je ne suis pas modérateur, mais contributeur.
Cela me fait plaisir que vous me preniez pour un étudiant mais j’ai 63 ans révolus
Soit. Cependant, il y a dans cet article des conseils qui peuvent être appliqués quel que soit le cas. Comme par exemple, celui repris par yg_be, de décrire ce que tu as essayé, ça évite de te reproposer la même chose et permet de cerner ton niveau pour adapter notre réponse.
25 sept. 2023 à 21:28
Bonsoir
Merci pour ta réponse
Je suis d'accord avec toi que l'on ne peut pas parler d'infini sur l'afficheur d'une calculatrice, mais je considère que le nombre 0,133333333 donne bien la fraction 2/15.
J'avais bien converti la partie décimale en texte mais je me suis vite emmêler les pinceaux. Par contre l'idée de commencer par la fin est à essayer. je vais voir.
26 sept. 2023 à 00:40
Bonjour
Si j'ai bien compris le but est de mettre un rationnel sous forme de fraction A/B.
On peut faire ça avec une calculatrice scientifique un peu évoluée.
Avec Excel on peut changer le format de cellule en choisissant Fraction. Il vaut mieux travailler sur la partie décimale, pour éviter l'affichage bizarre sous forme d'un entier et d'une fraction.
26 sept. 2023 à 06:18
Bonjour,
Oui mais sans calculatrice (je le fais avec ma "Petite fx" pas scientifique et pas évoluée du tout). Je cherche a le faire dans une fonction (algorithme) utilisable dans n'importe quel langage un tant soit peu évolué C#, Visual Basic ou même VBA.
Modifié le 26 sept. 2023 à 08:18
Bonjour
Pour en faire une fraction, pourquoi ne pas multiplier par 10^n / 10^n, n étant le le de décimales et ensuite réduire la fraction?
Par exemple 0.125 = 0.125 * 1000 / 1000 =125 / 1000 = 25 / 200 = 5 / 40 = 1 / 8
Là j'ai détaillé, mais si tu décomposes le numérateur et le dénominateur en produits de facteurs premiers, il te suffit de diviser en haut et en bas ceux qui sont identiques.
125 = 5 * 5 * 5
1000 = 5 * 5 * 5 * 2 * 2 * 2
On divise par 5 * 5 * 5, il reste 1 en haut et 2 * 2 * 2 en bas soit 8
27 sept. 2023 à 09:59
Bonjour
Désolé de ne pas avoir pu répondre plu tôt.
yg_be, merci pour ta fonction.
Je n'ai pas eu le temps de regarder comment elle fonctionne, je l'ai juste copier/coller dans Excel pour la tester.
Malgré un petit problème ( pour 0,13333333 elle renvoie ? au lieu 2/15 ) elle a l'air de fonctionner pas mal et elle feras surement une bonne base de réflexion.
je vais la regarder de près
27 sept. 2023 à 10:35
Pour 0,13333333 en 2/15, tu peux
- soit ajouter des chiffres après la virgule: 0.1333333333 donnera le bon résultat
- soit changer la valeur de 1 / 1000000000# dans le code, pour accepter un résultat moins précis comme fraction: 1 / 10000000#
27 sept. 2023 à 18:36
Bonsoir,
Merci beaucoup à yg_be qui m'a apporté une solution 'toute faite' qui fonctionne, et à toutes les personnes qui ont pris le temps de me répondre.
Bonne continuation.
28 sept. 2023 à 08:16
plus lisible et plus général: