Sehr sehr merkwürdige Ereignisse mit Fibonacci Programm

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
Ich sollte für eine Aufgabe einen nicht rekursiven Fibonacci Algorithmus entwerfen.
Für den Algorithmus hat mein weniger Hirnschmalz noch ausgereicht.
Allerdings stoße ich auf ein mekrwürdiges Problem bzw. einen Javabug(?).
Also der Algorithmus gibt für die ersten Fibonacci-Folgeglieder auf jeden Fall die richtigen Ergebnisse aus.
Dann allerdings genau ab dem Wert 47 bekomme ich negative Werte :bahnhof: .
Warum dass denn? Das Ginge ja nur, wenn der Wert a[i-2] negativ ist und an sich ist es generel unmöglich, dass einer der Vorgänger Werte negativ ist.
Hier mal die Ergebnisse für F(46) und F(47)
1836311903
-1323752223

Wie gesagt, wenn jemand weiß, ob es sich hierbei nur um einen Javabug handelt, dann wäre ich über Aufklärung dankbar. Wenn das am Algo liegen sollte( auch wenn ich das nicht nachvollziehen könnte, zumindest bis jetzt nicht) dann wäre ich auch hier für jeden Hinweis dankbar.

Und noch generel eine Frage. Vielleicht gibt es hier ja Laufzeit Experten. Was wäre hier denn ein gutes Maß für eine Laufzeitberechnung? Die Anzahl der Additionen? Die wäre ja in dem Fall Linear, oder sollte mans eher von den Bitvalues abhängig machen. Die werden ja bei großen Eingabelängen relativ schnell groß.

Code:
public class FibNonRec {
	
	public static int getFibonacciValue(int x){
		int[] a= new int[x+1];
		a[0]=0;
		a[1]=1;
		for(int i=2;i<=x;i++){
			a[i]=a[i-1]+a[i-2];
		}
		return a[x];
	}
	public static void main(String[] args){
		System.out.println(getFibonacciValue(46));
	
		System.out.println(getFibonacciValue(47));
	}
}
 
S

SlaterB

Gast
Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
      System.out.println(Integer.MAX_VALUE);
    }
}
 

Marco13

Top Contributor
Ja, long statt int hilft schonmal. Die Werte, die Long aufnehmen kann, sind so groß, dass die Berechnung schon langweilig werden könnte - obwohl die Laufzeit linear ist (was ist so schlimm oder falsch daran?)
 

0001001

Bekanntes Mitglied
Falls du beliebig große Zahlen berechnen willst, bleibt dir wohl nur der Weg über BigInteger. Hier ein iterativer Algorithmus zur Berechnung der Fibonacci Zahlen:

Code:
	public BigInteger calcFib(BigInteger n){
		BigInteger zero = BigInteger.ZERO;
		BigInteger one  = BigInteger.ONE;
		
		if (n.equals(zero)){
			return zero;
		}
		if (n.equals(one)){
			return one;
		}

		BigInteger i  = one;
		BigInteger a  = zero;
		BigInteger b  = one;

		while (i.compareTo(n) == -1) {
			BigInteger temp = b;
			b = b.add(a);
			a = temp;
			i = i.add(one);
		}
		return b;
	}
 

Leroy42

Top Contributor
Gast hat gesagt.:
danke schonmal, dann lags also doch an Java :).

Das kann ich jetzt nicht so stehen lassen! :noe:

Das hat mit Java an sich gar nichts zu tun.

Die Begrenztheit der int-Werte ist in fast jeder Sprache
(C, C++, Pascal, Fortran, Prolog, APL, Modula II, ...) anzutreffen
 
S

SlaterB

Gast
hier ging es auch weniger um 'Java vs C' sondern um 'dummes Programm vs menschlicher Fehler' ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Sehr großen Graph mit Verbindungen bauen und minimieren? Allgemeine Java-Themen 35
javamax2000 Sehr sonderbares Verhalten Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
Creylon Java verursacht sehr starkes ruckeln Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Gleiche Operation dauert teilweise sehr lange Allgemeine Java-Themen 12
M Externe Jar sehr langsam Allgemeine Java-Themen 23
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
nrg Arbeiten mit sehr großen CSV Dateien Allgemeine Java-Themen 20
K replaceAll bei sehr großen String Allgemeine Java-Themen 3
B Eingabemaske Komponenten aktivieren, funktionert nicht (sehr kurios) Allgemeine Java-Themen 2
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
O Speicherverbrauch von Java / VM sehr hoch? Allgemeine Java-Themen 27
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
G Lesen von sehr großen dateien Allgemeine Java-Themen 8
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
H Entpacken sehr langsam Allgemeine Java-Themen 10
Bleiglanz Benchmarks sind sehr schwierig Allgemeine Java-Themen 2
T Merkwürdige Fehlermeldung Allgemeine Java-Themen 5
J process.getInputStream() hängt auf merkwürdige Art und Weise Allgemeine Java-Themen 7
G *gg* merkwürdige frage Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben