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

Caml Discussion :

Num, calcul d'une racine carrée


Sujet :

Caml

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Num, calcul d'une racine carrée
    Bonjour,

    Je dois dans un programme calculer la racine carrée (ainsi que la racine cubique) d'un très grand nombre.
    J’utilise donc l'opérateur **/ pour effectuer une puissance 1/2 mais malheureusement l'opérateur **/ ne peux pas recevoir de float ou de ratio (fraction).

    Existe t-il un opérateur sqrt ou autre pour effectuer une racine carrée ou cubique sur les num ?
    Ou bien un type "Big Float" ?

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    let suiteSk rkPlus1 k =
    	let unDemi = (Int(1)//Int(2)) in
    	if k = 0 then ( ((Int 3)**/(unDemi) -/ Int(1)) // Int(2) )
    	else ( (rkPlus1 -/ Int(1)) // Int(2) );;

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut Désolé
    Pourtant je croyais de bonne foi que le code suivant calculerait la racine cubique de 27 :
    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # #load "nums.cma";;
    # open Num;;
    # int_of_num (Int 27 **/ (Int 1 // Int 3));;
    Exception: Invalid_argument "power_num".

    Apparemment il y a un défaut de documentation sur Num.power_num, la puissance doit être entière et néanmoins cela n'est pas mentionné.
    Je ne connais pas d'alternative simple (sans coder soi-même un algo de racine carrée) avec la bibliothèque standard
    Tout ce que je peux faire c'est rapporter le défaut de documentation.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Membre du Club
    Homme Profil pro
    Chercheur en maths appli
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en maths appli
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 46
    Points
    46
    Par défaut
    Voilà un petit algo de dichotomie pour approcher la racine nième du Num x par un rationnel, à une précision donnée :

    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
     
    (*
    nth_root : Num.num -> int -> float -> Num.num
    Compute a rational approximation of the n-rooth of x, with precision eps.
    *)
    let nth_root x n eps =
      (* dichotomy on interval [a, b] *)
      let rec _nth_root x n a b eps =
        if Num.float_of_num (b -/ a) <= eps then a
        else
          let m = (a +/ b) // Int 2 in
          if Num.power_num m (Int n) <=/ x then
            _nth_root x n m b eps
          else
            _nth_root x n a m eps in
      (* choose bounds of the interval *)
      let (a, b) =
        if Int 1 <=/ x then (Int 1, x)
        else (x, Int 1) in
      _nth_root x n a b eps
    Je n'ai pas vérifié tous les cas, il y a peut-être 2/3 tests à ajouter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comprendre mon exercice : formule récurrente de calcul d'une racine carrée
    Par djmhdi dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 15/01/2015, 18h30
  2. Réponses: 3
    Dernier message: 07/08/2013, 12h44
  3. Calculer une racine carrée
    Par eldiablo7 dans le forum C
    Réponses: 1
    Dernier message: 21/04/2009, 21h43
  4. Comment calculer une racine carrée ?
    Par Poseidon62 dans le forum Ada
    Réponses: 9
    Dernier message: 28/11/2006, 00h29
  5. calcul de la racine carrée par la méthode de Newton
    Par annoussa dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/11/2006, 11h10

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