|
|
Integer Maximalwert überschreitet -> Lösung wie in C? |
|
dummy2k |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 05.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 16:59
Titel: Integer Maximalwert überschreitet -> Lösung wie in C?
|
 |
Hallo,
ich habe eine Skript, wo der zulässige Integer-Wert überschritten wird. In C wird der überzogene Wert einfach abgezogen. So kann es passieren, dass eine negative Zahl zurückgegeben wird.
In Matlab ist es immer der Maximalwert, ganz gleich wieviel überzogen wurde.
Kann mir vielleicht jemand bitte einen Tipp geben wie man das am besten löst?
Danke! Lg, Dummy2k
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 17:03
Titel:
|
 |
Hallo,
Integer-Datentypen können nun mal nur einen beschränkten Bereich darstellen.
Wo genau tauchen die Probleme auf?
Welches Verhalten möchtest du an dieser Stelle?
Und natürlich: gibt es einen guten Grund, überhaupt (diese) Integer-Datentypen zu verwenden? Warum nicht Double, oder Integer mit mehr Bits?
Grüße,
Harald
|
|
|
dummy2k |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 05.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 17:12
Titel:
|
 |
Hallo Harald,
danke für deine Antwort. Ich muß eine Matlab-Version von einem C-Skript erstellen. Dabei kommen im C-Skript Integer-Werte vor. Gibt es ein Overflow, so wird in C nicht der Maximal-Wert genommen, sondern der Overflow einfach vom Maximal-Wert substrahiert.
Im Matlab wird aber immer der Maximal-Wert zurückgegeben. Wie löse ich das am besten? Ich könnte in Matlab zwar einen anderen Datentyp nehmen, aber dadurch würden riesige Zahlen entstehen. Darunter würde dann die Laufzeit leiden.
Danke für deine Hilfe! Lg, dummy2k
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 17:47
Titel:
|
 |
Hallo,
Zitat: |
Ich muß eine Matlab-Version von einem C-Skript erstellen. |
Was ist der Zweck dieser Übung?
Zitat: |
Im Matlab wird aber immer der Maximal-Wert zurückgegeben. Wie löse ich das am besten? |
Verschiedene Möglichkeiten, z.B.:
- casten auf einen Datentyp mit mehr Bits, Berechnung durchführen, zurückcasten.
- C-Code über die mex-Schnittstelle einbinden
Zitat: |
Ich könnte in Matlab zwar einen anderen Datentyp nehmen, aber dadurch würden riesige Zahlen entstehen. |
Warum sollten riesige Zahlen entstehen? Man muss ja ohnehin regelmäßig zurückrechnen, damit die Resultate noch stimmen.
Zitat: |
Darunter würde dann die Laufzeit leiden. |
Sicher, dass die Effekte da signifikant wären?
Weiterhin die Frage: wann tauchen überhaupt Overflows auf? Beispielsweise nur bei Multiplikation, oder bei verschiedensten Operationen?
Grüße,
Harald
|
|
|
dummy2k |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 05.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 18:09
Titel:
|
 |
|
 |
|
Hallo Harald,
Harald hat Folgendes geschrieben: |
Hallo,
Zitat: |
Ich muß eine Matlab-Version von einem C-Skript erstellen. |
Was ist der Zweck dieser Übung?
|
Ich muß das im Rahmen der Uni machen. Ich arbeite zum ersten Mal mit Matlab und C, daher verzeih bitte die Anfängerfragen
Zitat: |
Zitat: |
Im Matlab wird aber immer der Maximal-Wert zurückgegeben. Wie löse ich das am besten? |
Verschiedene Möglichkeiten, z.B.:
- casten auf einen Datentyp mit mehr Bits, Berechnung durchführen, zurückcasten.
- C-Code über die mex-Schnittstelle einbinden
|
Ich hab zuerst die Typecast-Variante benutzt, leider hat das wesentlich die Laufzeit erhöht. Gemessen habe ich es mit dem Profiler. Außerdem würde ja das bedeuten, dass einfach ein anderer Datentyp verwendet wird oder? Weil diese Lösung hätte ich dann quasi schon.
Zitat: |
Zitat: |
Ich könnte in Matlab zwar einen anderen Datentyp nehmen, aber dadurch würden riesige Zahlen entstehen. |
Warum sollten riesige Zahlen entstehen? Man muss ja ohnehin regelmäßig zurückrechnen, damit die Resultate noch stimmen.
Zitat: |
Darunter würde dann die Laufzeit leiden. |
Sicher, dass die Effekte da signifikant wären?
|
Da viel mit BitOr, BitShift, Bitand und div. Berechnungen gearbeitet wird, gehe ich davon aus, dass es so ist. Ich hoffe ich verzapf da jetzt kein Unsinn
Zitat: |
Weiterhin die Frage: wann tauchen überhaupt Overflows auf? Beispielsweise nur bei Multiplikation, oder bei verschiedensten Operationen?
|
Meistens bei Bitshift Operationen.
1) Was hälst du davon, wenn ich selbst eine kleine Funktion für den "wrap around" programmiere? z.B. Overflow bei Integer (2147483647) -> einfach den Overflow von 21474836487 substrahieren?
Vielen Dank für deine Mühe!!! Lg, dummy2k
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2012, 18:51
Titel:
|
 |
|
 |
|
Hallo,
Zitat: |
Ich muß das im Rahmen der Uni machen. Ich arbeite zum ersten Mal mit Matlab und C, daher verzeih bitte die Anfängerfragen |
Kein Problem. Ich frage nur deswegen nach, weil ich keine triviale Antwort auf deine Frage sehe.
Insbesondere wenn es um ein Projekt an der Uni geht: macht der C-Algorithmus etwas sinnvolles, wenn ein Overflow auftritt? Insbesondere falls nicht: ist es überhaupt nötig, dass bei MATLAB da das gleiche herauskommt?
Zitat: |
Außerdem würde ja das bedeuten, dass einfach ein anderer Datentyp verwendet wird oder? |
Ja, aber nur für die Operationen, wo es auch nötig ist.
Eine Möglichkeit, die ich noch nicht erwähnt habe: Man könnte eine Klasse schreiben, die vom entsprechenden Integer-Datentyp vererbt wird, und die problematischen Operationen passend überladen.
Zitat: |
Was hälst du davon, wenn ich selbst eine kleine Funktion für den "wrap around" programmiere? z.B. Overflow bei Integer (2147483647) -> einfach den Overflow von 21474836487 substrahieren? |
Ich würde vermuten, dass das nichts bringt, da die Overflow-Informationen ja schon verlorengegangen ist. Es kann allerdings sein, dass ich dich da falsch verstehe. Ich arbeite zugegebenermaßen zu 99,9% mit Doubles :)
Grüße,
Harald
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|