Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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.
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.
' 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.