NormalizeDouble-Paradoxon - Seite 11

 
transcendreamer:

Was mich stört, ist, dass ich, wenn ich eine Bruchzahl berechne, sie normalisiere, sie in eine Variable schreibe, sie dann lese und wieder normalisiere, Schwänze erhalte

z.B..

basis[0]=NormalizeDouble(sum_A,2);

GlobalVariableSet("Equity-"+portfolio_id,basis[0]); 

...

current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);

text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

Jetzt habe ich es geändert in

text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

und es scheint keine Schwänze zu geben, whew, whew, whew...

Ich habe bereits geschrieben, ich wiederhole es noch einmal - einige Zahlen gibt es nicht im Binärformat. Es gibt keine 0,1, keine 0,3 und viele andere. Egal wie oft Sie double val = NormalizeDouble(0.1434, 1) schreiben, Sie werden niemals 0.1 erhalten, weil es diese Zahl nicht gibt.

Zahlen werden zum Beispiel wie folgt dargestellt:

0.1 = 0.100000000000000000001
0.2 = 0.20000000000000001
0.3 = 0.29999999999999999999999
0.4 = 0.4000000000000000002
0.6 = 0.59999999999999998

aber
0,125 = 0,125
0,25 = 0,25
0,5 = 0,5

Wenn dies sehr störend ist, müssen Sie entweder runden oder Ihr eigenes Fahrrad schreiben, um Bruchzahlen darzustellen (es kann einige Bibliotheken geben, nicht interessiert), die nicht fpu verwenden.

Und bei der Umwandlung in eine Zeichenkette werden keine Schwänze hinzugefügt, sie sind von Anfang an vorhanden.

 
transcendreamer:

Damit ist meine Frage geklärt und wir können das Thema schließen.

Lösung: Sie müssen die Rundung erzwingen, auch nach der Normalisierung

Falsche Lösung. Beim Runden müssen Sie multiplizieren, runden und dividieren. Nach der letzten Division wird die Zahl entnormiert.
 
transcendreamer:

Möglicherweise... aber in Bezug auf das Endergebnis - es gibt Schwänze!

...

Keine Ausläufer nach der Normalisierung.
 
Integer:
Nach der Normalisierung gibt es keine Ausläufer.

Ich glaube, Sie führen den Mann in die Irre. Was meinen Sie damit, dass es nach der Normalisierung keine Schwänze gibt? Es kann keine Schwänze geben, nur in der Zeichenkette, die wir aus einer Zahl erhalten und den Wert gerundet haben (gerundet bereits in der Zeichenkette, nicht in double). Aber nach NormalizeDouble() gibt es Schwänze.

 
Integer:
Falsche Lösung. Beim Runden müssen Sie multiplizieren, runden und dividieren. Nach der letzten Division ist die Zahl nicht mehr normalisiert.

Was verstehen Sie unter Normalisierung? Stringo sagte hier, dass der Algorithmus in etwa so aussieht:

double NormalizeDouble(double val, int digits)
{
    val *= 10 ^ digits
    округляем к ближайшему целому
    val /= 10 ^ digits
    return val
}
 
pavlick_:

Ich glaube, Sie führen den Mann in die Irre. Was meinen Sie damit, dass es nach der Normalisierung keine Schwänze gibt? Es kann keine Schwänze geben, nur in der Zeichenkette, die wir aus einer Zahl erhalten und den Wert gerundet haben (gerundet bereits in der Zeichenkette, nicht in double). Aber nach NormalizeDouble() gibt es Schwänze.

Nun, wenn Sie glauben wollen, dass ich jemanden in die Irre führe, dann glauben Sie mir. Ich habe hier schon alle möglichen Leute gesehen, Ihre "prinzipientreue" Haltung wird mich nicht überraschen.
 
pavlick_:

Was verstehen Sie unter Normalisierung? Stringo sagte hier, dass der Algorithmus in etwa so aussieht:

Es wäre viel interessanter, was Sie unter Normalisierung verstehen.
 
Integer:
Ich stelle Ihnen eine konkrete Frage und Sie schütten Wasser auf mich. Es ist ganz normal, seinen Standpunkt zu erklären und zu argumentieren.
 
pavlick_:
Ich stelle Ihnen eine konkrete Frage und Sie schütten Wasser auf mich. Wie ist es normal, seinen Standpunkt zu erklären und zu argumentieren?
Lesen Sie die Lehrbücher und Unterlagen laut vor, oder was? Oder lesen Sie das Wörterbuch laut vor, etwa das Wort "ungefähr"?
 
Integer:
Lesen Sie die Lehrbücher und Unterlagen laut vor oder was? Oder lesen Sie das Wörterbuch laut vor, etwa das Wort "ungefähr"?
Es ist klar, wir haben nichts zu besprechen. Und Sie sollten sich besser aus Gesprächen heraushalten, wenn Sie nicht für Ihre Worte verantwortlich sind.
Grund der Beschwerde: