kostenloser Webspace werbefrei: lima-city


Rechenfunktionen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    maxilvlilian

    maxilvlilian hat kostenlosen Webspace.

    Hallo Community,
    Ich habe eine Frage bezüglich der Funktionen in Java. Es ist so, dass ich gerne den Sinn bzw was hinter Sachen wie z.B. Wurzeln oder Potenzen steckt. wenn ich jetzt eine Funktion (a,b) habe, wobei a die basis und b der exponent ist kreiren will, wie mach ich das am besten?
    klar gibts es auch Math.sqrt(), brauche aber die Funktion welche unter math.sqrt() praktisch gespeichert ist ;-)
    vielen Danke
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. http://de.wikipedia.org/wiki/Heron-Verfahren

    Das als kleine Hilfe, ansonsten werden wir deine Hausaufgaben nicht machen, du sollst ja was lernen bei ;-)
  4. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Was wäre das I-Net ohne Suchmöglichkeiten. Erstaunlicherweise hatte schon jemand vor die ein ähnliches Problemchen:
    http://www.java-forum.org/java-basics-anfaenger-themen/137735-applikativer-algorithmuss-wurzel-ziehen.html.

    Wenn du allerdings den "echten" Algorithmus /Code haben willst müsstest du dich wohl eher direkt an Oracle / Sun Microsystems wenden.


    Beitrag zuletzt geändert: 19.11.2014 16:53:52 von mein-wunschname
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    mein-wunschname schrieb:
    Wenn du allerdings den "echten" Algorithmus /Code haben willst müsstest du dich wohl eher direkt an Oracle / Sun Microsystems wenden.
    Oder einfach hier nachschauen: /jdk/src/share/native/java/lang/fdlibm/src/e_sqrt.c
  6. Autor dieses Themas

    maxilvlilian

    maxilvlilian hat kostenlosen Webspace.

    Zuerst mal Danke' aber das Ist leider keine Hausaufgabe und der Tipp war auch nicht allzu hilfreich, da ich da schon drauf gekommen bin wie es läuft :-)
    Viel mehr geht's mir um die Umsetzung bei Java in einer Funktion. Meine Funktion Potenz(a,b) würde ich so definieren: for(var s=b;s<s*b;s=b+b) mit b als Basis und a als exponent.
    Jedoch ist dies falsch und ich frage mich wie es richtig geht und bitte um Hilfe
  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    maxilvlilian schrieb:
    Meine Funktion Potenz(a,b) würde ich so definieren: for(var s=b;s<s*b;s=b+b) mit b als Basis und a als exponent.

    Unabhängig von der Programmiersprache: wenn b die Basis ist, und a der Exponent, wo kommt der in deiner for-Schleife denn vor?? Wenn du bei deiner Berechnung den Exponenten nicht berücksichtigst, ist es nicht verwunderlich, dass das Ergebnis nicht stimmt.
  8. bah, mit nem Einzeiler kann ich dir nicht helfen bei Exponent, aber wenn das das Problem ist, sehe ich 3 ursachen in deinem Lösungsansatz:

    1. s ist eine temporäre variable und verschwindet nach deinem einzeiler... dein for müsste das return s spucken...
    2. wo ist a?
    3. s<s*b ist totaler Käse als Begrenzer (ist dasselbe wie b<(3*b)... )
    4. s=b+b und täglich grüßt das murmeltier? (s bleibt immer 2*b... bis in alle ewigkeit...)

    also, ausdruck 2 und 3 sorgen jeweils alleine dafür, dass er die schleife nie verlässt...

    zudem hast du es nicht mal quadriert... sondern mit 2 multipliziert...
    ich würd dir raten, der erste Lösungsschritt ist, einen Mathekurs für 5./6.Klässler zu besuchen...
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Im Übrigen fällt mir gerade ein, dass es (in C) einen völlig anderen, sehr effizienten Ansatz gibt wie man eine Wurzel berechnen kann, bei dem man eine fixe Anzahl von Befehlen ausführt (nix Schleifen usw). Code:
    float Value;
    float halfValue;
    float tempSqrt;
    unsigned int* ptr;
    
    inline float FastSqrt(float r)
    {
    	if(r == 0.0f)
    		return 0.0f;
    
    	if(r < 0.0f)
    		r = -r;
    
    	Value = r;
    	halfValue = 0.5f * r;
    
    	ptr = (unsigned int*) &r;
    	*ptr = (0xbe6f0000 - *ptr) >> 1;
    	tempSqrt = r;
    
    	// spart man sich diese beiden Zeilen wirds etwas ungenauer,
    	// dafür aber auch schneller
    	tempSqrt *= 1.5f - tempSqrt * v * halfValue;
    	tempSqrt *= 1.5f - tempSqrt * tempSqrt * halfValue;
    
    	return Value * tempSqrt; 
    }
    In Java musst du die Pointer-Operation über
    Float.floatToRawIntBits()
    nachbilden.
  10. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hallo,

    da ja jede Rechenart auf die Grundstrucktur zurück führt würde ich einfach
    zB. 2^5=32 mit 2*2*2*2*2=32 in einer Schleife errechnen.

    Und da es keine Hausaufgabe ist, hier mein JAVA-Code ...
    private static int potenz(final int a, final int b){
    	int c = 1;	
    	for (int i = 0; i < b; i++) {
    		c = a * c;
    	}	
    	return c; 
    }
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!