LabVIEWForum.de
Typecast - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Typecast (/Thread-Typecast)

Seiten: 1 2


Typecast - dimitri84 - 08.12.2009 22:20

Guten Abend,

ich würde gerne wissen ob, ...

es einem Unterschied macht, wenn LV den Typecast macht -> roter Punkt
... oder ob man es selbst macht mit z.B. der Konvertierungspalette.

Bei einem LV Anwendertreffen hat man uns erzählt man soll die roten Punkte vermeiden, weil dann zusätzlich Speicher allokiert wird.

Kümmert Ihr euch da drumm oder lasst Ihr die Punkte Punkte sein?


Gruß dimitri


Typecast - eg - 08.12.2009 22:23

Es macht keinen Unterschied. Nur wenn du es ignorierst und gar nicht berücksichtigst, kann es zu komischen Verhalten im Programm kommen.


Typecast - dimitri84 - 08.12.2009 22:38

' schrieb:Nur wenn du es ignorierst und gar nicht berücksichtigst, kann es zu komischen Verhalten im Programm kommen.
Also lieber immer selbst machen, richtig?


Typecast - eg - 08.12.2009 23:04

Nur damit du explizit weisst, was im Programm passiert. Roter Punkt sagt z.B. nicht aus von welchem und in welchen Datentyp es castet.


Typecast - rolfk - 09.12.2009 08:49

' schrieb:Guten Abend,

ich würde gerne wissen ob, ...

es einem Unterschied macht, wenn LV den Typecast macht -> roter Punkt
... oder ob man es selbst macht mit z.B. der Konvertierungspalette.

Bei einem LV Anwendertreffen hat man uns erzählt man soll die roten Punkte vermeiden, weil dann zusätzlich Speicher allokiert wird.

Kümmert Ihr euch da drumm oder lasst Ihr die Punkte Punkte sein?
Gruß dimitri

Zuerst mal es ist kein Typecast sondern eine Konversion, was der Coercion-Dot macht. Bei einem Typecast bleibt der Speicherinhalt soviel möglich dasselbe aber der (interpretierte) Wert der Daten wird anders. Bei einer Konversion ist es genau umgekehrt.

Und die Antworten bis jetzt waren meiner Meinung nach jetzt etwas zu undifferenziert. Bei Skalars macht es prinzipiel nichts aus, aber explizite Konversion hilft wie von Eugen angegeben oft der Deutlichkeit.

Bei Arrays kann es durchaus einen Unterschied machen ob man explizit oder implizit konvertiert. Nimm als Beispiel eine Loop in der auf irgendeine Weise Single Precision Werte generiert werden die durch Autoindexing in ein Array angelegt werden. Dieses Array wird danach mit einem Double Precision Arrayeingang verbunden. Ohne explizite Konversion wird der Konversionsdot am Arrayeingang gemacht. Es wird also zuerst ein Single Precision Array angelegt und dieses wird danach in ein Double Precision Array konvertiert. Mit expliziter Konversion innerhalb der Loop, wird ganz einfach ein einzelnes Double Precision Array angelegt. Die Konversion findet so oder so statt, aber LabVIEW muss ein Array weniger anlegen, was sowohl Speicher als auch Laufzeit spart.


Typecast - unicorn - 09.12.2009 09:07

Von welchem Typ in welchen umgewandelt wird, ist aber klar, wenn der Eingang nur einen bestimmten Typ erwartet.

Ich mache mir nicht allzuviele Sorgen um die roten Punkte. Wenn es eindeutig ist, wie umgewandelt wird, lasse ich sie stehen. Ich vermeide Sie, wenn der rote Punkt verschwindet, indem ich z. B. den Datentyp einer Drahtes (Variable) bzw. eines Eingabe- oder Anzeigeelements Controls ändern kann. Bei der Umwandlung von DBL nach Integer sollte man nachdenken, ob man nicht aufrunden oder abrunden möchte.

Manchmal kann der Rote Punkt auch effizienter sein als eine explizite Umwandlung: guckst Du hier.

Übrigens ein roter Punkt ist kein Type Cast im eigentlichen Sinne. Beim Type Cast wird die binäre Darstellung als ein andere Typ intepretiert. Ein DBL hat 8 Byte und kann in ein Array von 4 I16 oder 8 Zeichen gecastet werden. Manchmal wird beim roten Punkt ein Type Cast durchgeführt (z. B. U8 -> I8) hingegen ist SGL -> I64 eine Umwandlung der Zahl mit Rundung.


Typecast - dimitri84 - 09.12.2009 09:55

Seid bedankt.

' schrieb:Manchmal kann der Rote Punkt auch effizienter sein als eine explizite Umwandlung: guckst Du hier.

Da wird aber nicht erklärt wann der 'coercion dot' effizienter ist, oder?


Typecast - rolfk - 09.12.2009 10:36

' schrieb:Seid bedankt.
Da wird aber nicht erklärt wann der 'coercion dot' effizienter ist, oder?

Aber sicher doch. Man muss nur ein wenig nachdenken. Die Multiplikation kann das Integer Array Inplace benützen. Mit der Konversion wird explizit ein weiteres Array angelegt. Das funktioniert aber nur bei LabVIEW Built-in Nodes. Die können und probieren Inplaceness zu verwenden wenn immer möglich.


Typecast - Achim - 09.12.2009 10:46

Offtopic2Verdacht

Wie funktioniert das?

[attachment=23066]


Typecast - dimitri84 - 09.12.2009 11:35

Wenn man ganz besonders dankbar ist und ganz ganz fest dran glaubt!










keine Ahnung wie das gekommen ist