WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit Datentypen

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2012, 00:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ReleaseNotes und Standards hin und her, ... Für mich bleibt das Doppelte eines Double wiederum ein Double und das Doppelte ist ein Integer!


Release Notes und Standards sind meines Erachtens sehr wichtig, da man dadurch eben nicht die vielzitierte Glaskugel benötigt, um das Verhalten voraussagen bzw. im Falle von unerwartetem Verhalten es zumindest im Nachhinein nachvollziehen kann.

Ich werde sicher nicht versuchen, dir deine Ansicht auszureden.
Wenn eine signifikante Anzahl an Nutzern sich über ein Verhalten von MATLAB in für MathWorks verfolgbarer Form (z.B. beim Technischen Support) beklagt, wird generell sicher überprüft, ob es einen Änderungsbedarf gibt. In diesem konkreten Fall sprechen für mich 2 Faktoren dagegen:
1. Ich beschäftige mich seit vielen Jahren mit MATLAB, und mir ist keine weitere Gelegenheit in Erinnerung, wo sich jemand an diesem Verhalten gestört hätte.
2. (und noch gravierender): eine Vielzahl Nutzer ist dieses Verhalten gewohnt und verlässt sich darauf. Da wird man sich sehr sehr gut überlegen, etwas an dem Verhalten zu ändern.

In MATLAB ist es eine sehr weitverbreitete Praxis, mit Doubles zu arbeiten, solange nichts dagegen spricht, um Probleme wie das eben von dir geschilderte gar nicht erst aufkommen zu lassen. Mir sind folgende Ausnahmen bekannt, in denen bewusst mit Integer-Datentypen gearbeitet wird:
1. Bilddaten (uint8), da ein Pixel nunmal in jeder Farbebene nur Integer zwischen 0 und 255 annehmen kann. Da ist es sehr hilfreich, dass, wenn man Integer reinsteckt, auch wieder Integer herauskommt.
2. Wenn Hardware simuliert wird, die mit bestimmten Integerdatentypen arbeitet. Hier liegt für mich nahe, dass man ohnehin nur mit Integern arbeitet, also nicht "mischt".
3. Speicherprobleme. Auch hier wird es so sein, dass man bei Integern bleiben möchte. Wenn aus Integer * Double nun in einem späteren Release Double würde, könnte das dazu führen, dass Skripte und Funktionen, die in heutigen Releases durchlaufen, einen Out-Of-Memory - Error bringen. Nicht gut.

Wenn du das doppelte oder ein n-faches einer Variable x berechnen willst, nichts einfacher als das:
Code:

Wenn ich mit ganzzahligen Daten arithmetische Berechnungen durchführe, werde ich sie in MATLAB immer als Double behandeln (d.h. auch sie aus Datenfiles als Double auslesen; lieber die Datei blockweise verarbeiten, wenn sie zu groß ist), damit keine unerwarteten Effekte auftreten. Eine mögliche Ausnahme wäre 3. von oben, halte ich aber nicht für praktikabel.

Letztlich wird es jedoch immer die Frage bleiben, welche Arbeitsweise man gewohnt ist. Ich habe einst mit C angefangen, arbeite gezwungenermaßen heute noch gelegentlich mit C und finde es - um nur ein Beispiel zu nennen - immer noch unlogisch, dass das 1. Element eines Arrays den Index 0 hat. Jede Programmiersprache hat ihre Eigenheiten, und manchmal mag einem der Grat zwischen Bug und Feature recht schmal erscheinen.

@ Jan: die Frage nach der (lange fehlenden) Arithmetik für 64bit-Integer hat sich mir auch gestellt. Ich habe zwei mögliche Erklärungen:
- es bestand keine ausreichende Nachfrage.
- der nötige Aufwand - aus der Doku: For binary operations involving a 64-bit integer array and a scalar double, MATLAB computes the operation as if 80-bit extended-precision arithmetic were used, to prevent loss of precision.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.