Beantwortet 3. Wurzel berechnen

Alle Antworten

  • Dienstag, 1. Januar 2013 15:38
     
     Beantwortet Enthält Code

    Hallo, laut definition ist die n-te Wurzel aus a das selbe wie a hoch 1/n. Daraus folgt:

    double a = 8, n = 3;
    double d = Math.Pow(a, 1/n);


    Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets

    • Als Antwort markiert 256 Hoch 3 Montag, 21. Januar 2013 19:40
    •  
  • Donnerstag, 3. Januar 2013 20:16
     
     
    Danke für die Antwort, kannst du mir vielleicht noch sagen warum keine Funktion direkt in der Math-Klasse implementiert ist?
  • Donnerstag, 3. Januar 2013 21:10
     
     

    Ich kann auch nur Vermutungen anstellen, aber ich denke das es an der Art liegt, wie die CPU das rechnet. Wie die Werte in den Registern Bitweise verändert werden usw.
    Da gibt es bestimmt eine exaktere Erklärung für, aber die interessiert heute wohl weniger jemanden...

    PS: Eine richtige Erklärung würde mich auch interessieren.


    Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets

  • Donnerstag, 3. Januar 2013 21:57
    Beantworter
     
     Beantwortet

    Hallo zusammen,

    das dürfte wohl daran liegen, dass auf den FPUs bereits sehr früh eine Quadratwurzel implementiert wurde - bereits der 8087 kannte sie als FSQRT.

    Für höherwertige Wurzeln besteht seltener Bedarf und auf den frühen Prozessoren bzw. FPUs war nur relativ wenig Platz, so dass nur das notwendigste implementiert wurde. (Man kann das an den später hinzugefügten Befehlen sehen).

    Die Math-Klasse setzt sie wiederum in den entsprechenden Aufruf um.
    Entsprechendes gilt auch für andere Math Methoden.

    Die POW Methode ist zwar einfach aber nicht unbedingt schnell,

    siehe z. B.: In Search of a Fast Cube Root 

    Wobei man im Integer Fall ggf. weiter optimieren kann:
    http://stackoverflow.com/questions/4331820/integer-cube-root

    Gruß Elmar

    • Als Antwort markiert 256 Hoch 3 Montag, 21. Januar 2013 19:41
    •