Bei mir scheitert pow schon an der Wohldefiniertheit:
for (int i = 0; i =< exponent; i++)
müsste sein
for (int i = 0; i <= exponent; i++)
Ist das Absicht, und das, was wir "beweisen" sollen?
Theorietestat #2: pow
Moderator: Algorithmen und Datenstrukturen
Forumsregeln
Bei Postings zu Aufgabe Nr. x auf Blatt Nr. y lassen Sie Ihr Betreff bitte mit "y.x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!
Bei Postings zu Aufgabe Nr. x auf Blatt Nr. y lassen Sie Ihr Betreff bitte mit "y.x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!
Re: Theorietestat #2: pow
Das ist kein geplanter Fehler. Die Verbesserung ist korrekt - aber das sollte dem Compiler schon auffallen und solche Fehler sind eigentlich nicht der Plan.
Gehen Sie davon aus, dass da <= statt =< steht. Wird verbessert - danke für den Hinweis.
Es ist allerdings ein weiterer logischer Fehler im Algorithmus enthalten, der im Korrektheitsbeweis erkannt werden soll.
Gruß
Gehen Sie davon aus, dass da <= statt =< steht. Wird verbessert - danke für den Hinweis.
Es ist allerdings ein weiterer logischer Fehler im Algorithmus enthalten, der im Korrektheitsbeweis erkannt werden soll.
Gruß
-
- BASIC-Programmierer
- Beiträge: 111
- Registriert: 6. Mai 2017 13:05
Re: Theorietestat #2: pow
Sehe ich das richtig, dass der Logikfehler einfach sein soll, dass nicht beachtet wird, dass Basis und Exponent gleichzeitig 0 sein können? Oder geht es hier auch um Überläufe, die nicht abgefangen werden? Jedenfalls ist 0^0 nicht definiert. b^0 und 0^e scheinen mir ansonsten korrekt behandelt.
- LordMaddhi
- Nichts ist wie es scheint
- Beiträge: 23
- Registriert: 20. Apr 2017 11:57
- Wohnort: Darmstadt, Hessen
Re: Theorietestat #2: pow
Ich glaube die weiteren Fehler sind folgende:
- bei der for-Schleife wird eine Iteration zu viel gemacht, sollte eher i < exponent heißen, z.B. ist 2^5 = 32, hier aber 64.
- möglicher arithmetischer Überlauf bei:
- i (wenn exponent > Integer.MAX_VALUE)
- result (wenn base > Integer.MAX_VALUE)
(Kann man aber durch Änderung der Vorbedingung ausschließen)
- bei der for-Schleife wird eine Iteration zu viel gemacht, sollte eher i < exponent heißen, z.B. ist 2^5 = 32, hier aber 64.
- möglicher arithmetischer Überlauf bei:
- i (wenn exponent > Integer.MAX_VALUE)
- result (wenn base > Integer.MAX_VALUE)
(Kann man aber durch Änderung der Vorbedingung ausschließen)
Ich bin nicht die Signatur. Ich putze hier nur.
-
- BASIC-Programmierer
- Beiträge: 111
- Registriert: 6. Mai 2017 13:05
Re: Theorietestat #2: pow
Hmm, in der PDF, die ich Vorliegen habe (v7) steht da schon "i < exponent". Steht bei dir da <=? Klingt so, als ob zusätzlich zu den absichtlichen Fehlern noch ein unabsichtlicher Fehler drin war, der mittlerweile korrigiert wurde...
Ich stimme jedenfalls zu, dass result überlaufen kann, aber i kann es meiner Meinung nach nicht, denn exponent kann ja nicht größer als Integer.MAX_VALUE sein, weil es ja selbst eine int ist.
Ich stimme jedenfalls zu, dass result überlaufen kann, aber i kann es meiner Meinung nach nicht, denn exponent kann ja nicht größer als Integer.MAX_VALUE sein, weil es ja selbst eine int ist.
Re: Theorietestat #2: pow
In meiner Version steht immer noch =< (Version 7) - wie gesagt da sollte eigentlich <= stehen, ist beim Tippen nur falsch herum passiert. In der nächsten Version wird das korrigiert.
Als kleiner Hinweis überlegen Sie was bei b^0 herauskommen sollte. Was den Logikfehler angeht. Es gibt hier auch mehrere mögliche Ansätze das zu reparieren.
Überläufe gehören natürlich auch dazu (Wohldefiniertheit bzw. Input)
Gruß
Als kleiner Hinweis überlegen Sie was bei b^0 herauskommen sollte. Was den Logikfehler angeht. Es gibt hier auch mehrere mögliche Ansätze das zu reparieren.
Überläufe gehören natürlich auch dazu (Wohldefiniertheit bzw. Input)
Gruß