Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    calcolo della radice quadrata in java

    salve ragazzi.. avrei bisogno di un aiuto per quanto riguarda la programazione java.. allora vorrei creare un programma java che risolvi il problema del calcolo della radice quadrata mediante l'algoritmo di Newton; con un metodo statico senza l'impiego del metodo stato Math.sqrt()

    Il problema è il seguente:

    r = radice di a

    allora, Disponendo di un valore approssimato (r’) della radice r (l’approssimazione può anche essere grossolana), la relazione:

    r” = (r’+ a/r’)/2

    permette di calcolare una approssimazione migliore della radice di a.

    una mia considerazione è che Applicando ripetutamente questa formula usando ogni volta la nuova stima ottenuta per determinare la successiva si ottiene una stima sempre migliore della precedente..

    Il problema che si presenta nella progettazione è che non è possibile definire a priori il numero di iterazioni necessarie per ottenere una “buona” stima.
    Non conoscendo il valore vero si può determinare l’errore in base alla differenza tra due stime consecutive.
    Quindi si valuta la quantità:

    e = | a – r”2|

    e si termina l’algoritmo quando questa quantità diventa minore di 0.000001 si ottiene una precisione fino alla sesta cifra decimale.

    queste sono le cose che ho capito fin ora... hmm.. qualcuno mi può aiutare gentilmente come posso iniziare il programma? ?

    come faccio a determinare il tempo di esecuzione del proprio metodo usando per la misura il metodo statico Math.nanoTime() verificando la relazione tra precisione e tempo di esecuzione??

    sarei grato di ricevere le vostre risposte e suggerimenti.. grazie raga!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    è il classico esercizio sulla ricorsione:

    codice:
        private static double err = 0.000001d;
        
        public static double sqrt(double x0, double x1) {
            return (Math.abs(x0-x1*x1) <= err ? x1: sqrt(x0, (x1+x0/x1)/2));        
        }
        
        public static void main (String[] args) {
            System.out.println(sqrt(9, 1));
        }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27
    grazie andrea per la risposta.. sono nuovo da questa parte e devo dire che esistono veramente della gente pronti ad aiutare.. ho provato il programma e infatti funziona.. alcuni cose che non ho capito sono queste:

    codice:
     return (Math.abs(x0-x1*x1) < err ? x1 : sqrt(x0, (x1+x0/x1)/2));
    che cosa vuole dire?? (scusa l'ignoranza, e che sono nuovo con java... )

    mi puoi aiutare (o qualcuno) anche con questa:

    come faccio a determinare il tempo di esecuzione del proprio metodo usando per la misura il metodo statico Math.nanoTime() verificando la relazione tra precisione e tempo di esecuzione??

    grazie grazie grazie.......

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Per la questione del tmpo d'esecuzione: devi prendere il tempo prima e dopo l'istruzione:

    codice:
    public static void main (String[] args) {
      long inizio = System.nanoTime();
      System.out.println(sqrt(9, 1));
      long durata = System.nanoTime() - inizio;
      System.out.println("Tempo impiegato ns: "+durata);
    }
    Per l'altra questione, è un classico della programmazione:

    condizione ? vero : falso

    codice:
    return (Math.abs(x0-x1*x1) <= err ? x1 : sqrt(x0, (x1+x0/x1)/2));
    equivale a
    codice:
    if (Math.abs(x0-x1*x1) <= err) {
      return x1;
    }
    else {
      return sqrt(x0, (x1+x0/x1)/2);
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.