Funktionsberechnung - Problem !

S3rious

Grünschnabel
Hallo,
ich soll für meinen Mathe Lehrer ein Programm schreiben, welches alle Möglichkeiten, für die Variablen a und b der Funktion Funktion f(x) = ax^4 + bx^3, in einem Intervall von -100 bis 100 durchprobiert. Dabei soll die Funkton immer durch den Punkt (2|4) gehen. D.h. man hat praktisch die Gleichung a*16 + b*8 = 4 und muss dann verschiedene Werte für a und b einsetzen. Das Programm habe ich schon fertig geschrieben, allerdings gibt es mir keinen einzigen Wert aus. Hier ist der Quellcode meines Programms:


public class Funktionsberechnung
{
public static void main (String[]arguments)
{
double a, b;
a = -100;
b = -100;

while (a <= 100)
{
while (b <= 100)
{
if((a*16 + b*8) == 4)
{
System.out.println("a = " + a + " b = " + b);
}
b = b + 1;
}

a = a + 1;
}
}
}


Es wäre sehr nett von euch wenn ihr mir sagen könntet wo der Fehler liegt.

Schon mal Danke für die Antworten.

mit freundlichen Grüßen

S3rious
 
Ein Hinweis:
Zur besseren Lesbarkeit benutze den [Code] [/Code] Tag bzw. [code=java] Tag


Wenn du eine Ganzzahl mit 8 oder 16 multiplizierst kann es niemals 4 ergeben. Das was du zu lösen sollst ist eine lineare Gleichung und keine einfach Multiplikation.

Ach ja hierbei sollte man (zur besseren Lesbarkeit u.a.) 2 for Schleifen verwenden:

Java:
for(int a=-100; i<=100;a++){
     for(int b=-100; i<=100;b++){
   

     }
}

a++ ist hierbei eine Kurzschreibweise zu a=a+1 bzw. a+=1;
 
Zuletzt bearbeitet von einem Moderator:
Danke für den Hinweis ! Ich habe den Code mal überarbeitet:

HTML:
public class Funktionsberechnung
{
  public static void main (String[]arguments)
  {
  
    for(double a = 0; a <= 100; a = a + 0.01)
    {
      for(double b = 0; b <= 100; b = b + 0.01)
      {
        if((a*16 + b*8) == 4)
        {
          System.out.println("a = " + a + "   b = " + b);
        }

      }


    }

  }
}

Leider bekomme ich sehr selstame Werte ausgegeben( z.B. Zahlen mit bis zu 10 Nachkommastellen, obwohl das ja nach dem Quelltext gar nicht sein kann (a = a +0.01).
Weiß einer von euch woher das kommt ?

mfg

S3rious
 
Das ist kein Fehler....das hat was mit der begrenzten Genauigkeit zu tun. (das Verhalten gibt es in vielen Programmiersprachen)

Vielleicht wäre BigDecimal eine Klasse für dich oder du vergrößerst die Werte auf Ganzzahl
 
Zuletzt bearbeitet:
Java:
for(int a = 0; a <= 10000; a = a + 1)
        {
            for(int b = 0; b <= 10000; b = b + 1)
            {
                if((a*16 + b*8) == 400)
            {
            System.out.println("a = " + a/100f + "   b = " + b/100f);
        }
 
Du kannst deine Ausgabe einfach formatieren:
Java:
NumberFormat nf = NumberFormat.getInstance();
		nf.setMinimumFractionDigits(2);
		nf.setMaximumFractionDigits(2);
		for(double a = 0; a< 2;a+=0.01){
			System.out.println(nf.format(a));
		}
 
Bei Decimal Berechnungen, die 100% genau sein müssen sollte man double/float (Fließkommazahlen) nicht benutzen und in Java auf BigDecimal zurückgreifen.

Auf Grund der Tatsache, dass bei der Addition im IEEE-754 Format (so wie sie intern
im Rechner abläuft sobald man zwei Zahlen des primitiven Datentyps float oder double
versucht zu addieren/subtrahieren) die Exponenten angeglichen werden müssen, und somit
die Mantissen verschoben werden, entsteht ein Fehler bei der Berechnung. Dieser Fehler fällt
insbesondere dann ins Gewicht wenn man versucht sehr grosse und sehr kleine Zahlen zu
addieren/ subtrahieren.

http://de.wikipedia.org/wiki/IEEE_754
 
Zurück