Benutzer mit den meisten Antworten
Logarithmische Werte Runden

Frage
-
Hallo
Ich habe folgende möglichen Logarithmischen Werte, die man eingeben kann:
Weiß jemand, wie ich eine Rundung auf diese Werte schaffen kann?
0,0501 0,0631 0,0794 0,1 0,1259 0,1584 0,1995 0,2511 0,3162 0,3981 0,5011 0,6309 0,7943 1 1,2589 1,5848 1,9952 Angenommen die Eingabe wäre: 0,052, dann sollte als Rückgabe automatisch 0,0501 errechnet werden. usw.
Ich weiß zwar, wie eine Rundung auf Dezimal Stellen geht, aber eben leider nicht, wie man das bei einem Logarithmus macht.
DANKE im Voraus - Schönen Tag
Antworten
-
Hi,
Du müsstest erst einmal den Algorithmus für Deine Werte festlegen. 10-log bringt:0
0,3010
0,5771
0,6021
usw.Die Liste mit den Werten kannst du über umgekehrte Funktion für einen Bereich von-bis erstellen und dann die minimale Abweichung suchen, z.B. so:
Dim liste As New List(Of Double) liste.AddRange(New Double() {0, 0.0501, 0.0631, 0.0794, 0.1, 0.1259, 0.1584, 0.1995, 0.2511, 0.3162, 0.3981, 0.5011, 0.6309, 0.7943, 1, 1.2589, 1.5848, 1.9952}) Dim suche = 0.052 Dim res = (From wert In liste Let diff = Math.Abs(wert - suche) Order By diff).FirstOrDefault Console.WriteLine(res) Console.ReadKey()
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Zero-G. _ Mittwoch, 5. August 2015 14:45
Alle Antworten
-
Hi,
so, wie ich es verstanden habe, füllst Du eine Liste mit den logarithmischen Werten und wählst dann das Element mit der geringsten Abweichung zum vorgegebenen Wert aus.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks -
Hallo
DANKE - Nein, im Endeffekt ist es ein Textfeld, das per Hand gefüllt wird.
Dahinter steckt, dass es mehrere Typen der Eingabemöglichkeit gibt. - Deshalb ist eine Liste nicht dafür geeignet.
Aus diesem Grund muss ich die "Text"-Eingabe validieren & mathematisch runden, um auf Korrektheit zu prüfen.
DANKE
-
Hallo zusammen,
ich habe es genauso verstanden wie Peter. In diesem Fall würde ich die sortierte Liste durchgehen und je den Wert heraus suchen der größer bzw. kleiner ist. Anschließend ermittelst du deren Durchschnitt und vergleichst diesen mit dem zu rundenden Wert. Sollte der Durchschnitt kleiner sein, rundest du ab - andernfalls auf den größeren Wert auf.
Komplizierter wird es mit dem Runden wenn dieses auch noch logarithmisch geschehen soll. Also so das 0,45 auf 1 statt 0 gerundet werden könnte wenn es die log-Funktion zu lässt. Hier müsste man dann mit den logarithmischen Werten der Tabelle und deines Wertes arbeiten und diese vergleichen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
-
Hi,
Du müsstest erst einmal den Algorithmus für Deine Werte festlegen. 10-log bringt:0
0,3010
0,5771
0,6021
usw.Die Liste mit den Werten kannst du über umgekehrte Funktion für einen Bereich von-bis erstellen und dann die minimale Abweichung suchen, z.B. so:
Dim liste As New List(Of Double) liste.AddRange(New Double() {0, 0.0501, 0.0631, 0.0794, 0.1, 0.1259, 0.1584, 0.1995, 0.2511, 0.3162, 0.3981, 0.5011, 0.6309, 0.7943, 1, 1.2589, 1.5848, 1.9952}) Dim suche = 0.052 Dim res = (From wert In liste Let diff = Math.Abs(wert - suche) Order By diff).FirstOrDefault Console.WriteLine(res) Console.ReadKey()
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Zero-G. _ Mittwoch, 5. August 2015 14:45
-
In dem Fall musst du aber eine Formel haben um die einzelnen Werte der Liste ausrechnen zu können. Sprich eine Log Funktion mit entsprechenden Angaben welche Eingabeparameter du für die Werte brauchst.
In dem Fall könntest du dir sehr wohl eine "unendlich" Liste erstellen indem du eine Iteratorfunktion schreibst. Das dürfte allerdings ziemlich ineffizient sein.
Stattdessen kannst du die Umkehrfunktion vom Logarithmus auf den zu rundenden Wert anwenden und dann mit den Eingabeparametern der Funktion linear vergleichen und auf den nächst gelegenen runden. Von dem erhaltenen Wert errechnest du dann wieder den Logarithmus. Das Ergebnis ist dann entsprechend ein Wert aus der Liste.Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets