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!
ich glaube es liegt am Wetter, aber mir fallen nur unsagbar blöde Algoryhtmen ein. Hier die Problemstellung:
Ich habe ein double-Array mit erlaubten Werten, zum Beispiel {0,5;1;2;4} und einen double-Eingang der einen beliebigen Wert annehmen darf. Nun möchte ich aus dem Array den Wert ermitteln, dessen Differenz zum Einganswert am kleinsten ist.
Anbei ein kleiner VI-Abschnitt zur Verdeutlichung! Vielleicht habt ihr effizientere Ideen als ich!
Für Ideen und Anregungen bin ich dankbar.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
RE: Wert an naheliegensten Wert aus Array anpassen
Hallo TSC,
1. Differenz aus neuem Wert und deinem Array bilden
2. ArrayMinMax auf diese Differenz anwenden: Min-Index lesen
3. Mit dem Min-Index das Element aus deinem Array indizieren…
RE: Wert an naheliegensten Wert aus Array anpassen
Danke für den Ansatz, hier die Umsetzung deiner Idee (wenn ich dich richtig verstanden habe )
Aber erstens: holt mir das nicht den nächst höheren bei einem genau mittig liegendem Wert
und zweitens frage ich mich, ob es nicht effizienter geht, als alle Differenzen zu bilden und so weiter?
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
RE: Wert an naheliegensten Wert aus Array anpassen
Zitat:Es gibt genau definierte Rundungsregeln in der IEEE754-Spezifikation, die die Grundlage für alle FloatingPoint-Operationen bildet…
Ja, und da seht doch hoffentlich drin, dass man eben bei 1,5 auf 2 aufrundet (also der nächst höhere Wert)?
Zitat:Du willst wissen, welcher Wert am nächsten zu deinem Input liegt - ohne den Abstand zu berechnen???
Solange dein Array sortiert vorliegt, kannst du natürlich auch im Array suchen: Threshold1DArray ist die gesuchte Funktion…
Haha, ja so könnte man es formullieren. Das Array liegt sortiert vor. Hier ein Versuch der Umsetzung:
Soweit so gut. Schaut schön aus. Aber auch hier ein Rundungsproblem: habe ich im Array die Werte 2 und 4 und mein Input ist 3. Dann bekomme ich die 2 zurück.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
22.07.2016, 14:36 (Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2016 14:38 von GerdW.)
RE: Wert an naheliegensten Wert aus Array anpassen
Hallo TSC,
Zitat:da seht doch hoffentlich drin, dass man eben bei 1,5 auf 2 aufrundet
Ja.
Zitat:(also der nächst höhere Wert)?
Falsch: der nächstliegende gerade Wert. ("bankers rounding")
Einfach mal Wikipedia lesen…
Zitat:hier ein Rundungsproblem: habe ich im Array die Werte 2 und 4 und mein Input ist 3. Dann bekomme ich die 2 zurück.
Welcher gerade Wert liegt deiner "3" wohl näher: 2 oder 4?
Was erwartest du hier eigentlich für ein Ergebnis, wenn die Aufgabe lautet: "Finde den nächstliegenden Wert?"
Lösung: Threshold liefert dir einen "gebrochenen Index" zurück. Den kann man prima abrunden…
RE: Wert an naheliegensten Wert aus Array anpassen
Ja danke, das hat geholfen,.. viel Input, guter Artikel. Kurz: es gibt keine Funktion die nach Norm falsch, aber dafür meinen Wünschen entsprechend, rundet!? Grml! Nagut, dann runde ich händisch!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
RE: Wert an naheliegensten Wert aus Array anpassen
(22.07.2016 14:47 )TSC schrieb: Kurz: es gibt keine Funktion die nach Norm falsch, aber dafür meinen Wünschen entsprechend, rundet!?
Um die Frage zu beantorten, müßte man erst mal wissen, was Dein Wünsche sind. Bisher hst Du nur verraten, dass Du 1.5 auf 2 und 2.5 gern auf drei gerundet haben möchtest. Darf man daruf schließen, dass Du immer aufgerundet haben möchtest?
Dann könnte ein kleines SubVI, welches das macht, z.B so aussehen (aber vielleicht geht es auch einfacher):
Hi Jens, das hatte GerdW auch schon vorgeschlagen und ist im letzten Anhang von mir verwendet. Bisher die angenehmste Lösung mit dem einzigen Problem: ich möchte nicht so runden, wie es laut IEEE korrekt wäre, sondern explizit aufrunden, wenn ich exakt zwischen zwei werten liege.
(24.07.2016 15:21 )Lucki schrieb: Um die Frage zu beantorten, müßte man erst mal wissen, was Dein Wünsche sind. Bisher hst Du nur verraten, dass Du 1.5 auf 2 und 2.5 gern auf drei gerundet haben möchtest. Darf man daruf schließen, dass Du immer aufgerundet haben möchtest?
Dann könnte ein kleines SubVI, welches das macht, z.B so aussehen (aber vielleicht geht es auch einfacher):
Moin Lucki,
Naja ich hatte gehofft das getan zu haben (Post 1)?! zugegeben, ich habe meine Wünsche zum problematischsten Teil im Anhang versteckt (aufrunden wenn ich exakt zwischen zwei werten liege).
Aber hier nochmal konkret:
Ich möchte aus einem sortierten Array den Wert ermitteln, welcher einem Suchelement am nächsten ist. Sollte das Array zwei Werte mit gleichem Abstand enthalten, möchte ich IMMER den größeren Wert erhalten.
VG,
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)