Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Mathe Nachhillfe gesucht (http://www.expert-advisor.com/forum/showthread.php?t=6742)

AVT 08.08.20 14:16

Mathe Nachhillfe gesucht
 
Eigentlich suchte ich nach der Erklärung, was
_Digits%2 "in Normalsprache bedeutet/ausrechnet".
Soweit ich gekommen bin, ist das wohl "Rest von _Digits geteilt durch 2".
Also habe ich mir ein Print gemacht - das aber ergibt völlig widersprüchliche Angaben:
Code:

Print(" Digits=",DoubleToStr(_Digits,0),
      " Digits/2=",DoubleToStr((_Digits/2),_Digits),
      " Digits%2=",DoubleToStr(Digits%2,_Digits) );
// ==> Result EURUSD (Digits=5)
// Digits=5
// Digits/2=2.00000
// Digits%2=1.00000
// ==> Result AUDJPY (Digits=3)
// Digits=3
// Digits/2=1.000
// Digits%2=1.000

Wieso ist 5/2=2 und nicht 2.5, wieso ist 3/2=1 und nicht 1.5
und wieso ist der Rest nicht 5.
Kann mir das bitte jemand erklären? Danke. AVT

Indikator-Trading 08.08.20 15:47

Der % Operator ist ja der Modulo Operator. Also 5%2 ergibt 1 da die zwei zweimal gerade in die 5 passt und der Rest der übrig bleibt 1 ist (5-4 =1)

10%7 würde somit 3 liefern, da dass der Rest der Division ist.

Digits wird vom Typ integer sein. Daher kommt nur das ganzzahlige Ergebnis zurück und der Rest wird "verschluckt"

AVT 08.08.20 16:21

Zitat:

Zitat von Indikator-Trading (Beitrag 44193)
Der % Operator ist ja der Modulo Operator.
Digits wird vom Typ integer sein. Daher kommt nur das ganzzahlige Ergebnis zurück und der Rest wird "verschluckt"

Danke Indikator-Trading, das Wort Modulo hat geholfen :)

Daß aber bei ner Division von Integer zwingend ein Integer-Ergebnis rauskommt, finde ich ziemlich merkwürdig - heißt ja, wenn ich eine Periode von 25 Tagen um die Hälfte kürze (also /2) kommt (rein rechnerisch 12,5 raus, was dann gerundet (,5 nach oben) wird und dann in 13 Tagen endet - ohne daß ich mich dagegen wehren kann.
Bedeutet wohl dann gleichzeitig, daß ich die Periode dann als double setzen muß, um wenigstens selber zu bestimmen, ob auf- oder abgerundet wird.
AVT

MA-EA 08.08.20 21:39

Hallo.

Hab über nen Weg nach gedacht, wie man von beliebigen double Werten rausfinden kann, ob sie gerade oder ungerade sind. Das einfachste wär wohl, sie so oft mit 2 zu dividieren oder zu multiplizieren, bis die letzte Stelle 0 oder 5 ist. :confused: Keine Ahnung, brauch auch Mathe-Nachhilfe. :rolleyes:

Indikator-Trading 08.08.20 21:55

Zitat:

Zitat von MA-EA (Beitrag 44196)
Hallo.

Hab über nen Weg nach gedacht, wie man von beliebigen double Werten rausfinden kann, ob sie gerade oder ungerade sind. Das einfachste wär wohl, sie so oft mit 2 zu dividieren oder zu multiplizieren, bis die letzte Stelle 0 oder 5 ist. :confused: Keine Ahnung, brauch auch Mathe-Nachhilfe. :rolleyes:

Ich würde dir eher empfehlen die beiden ersten Posts in diesem Thema durchzulesen, dann hättest du deine Lösung. Dann das mit einer kleinen If-Abfrage kombinieren und fertig. Da Du ja schon Jahre dabei bist, schaffst du den Rest schon selbst oder?

traderdoc 08.08.20 21:59

Zitat:

Zitat von MA-EA (Beitrag 44196)
Hallo.
Keine Ahnung, brauch auch Mathe-Nachhilfe. :rolleyes:

Stimmt!

Nun, bei der Division einer Integerzahl stolpern tatsächlich viele und ja, die Integerzahl müsste dann vorher in eine double gewandelt werden.

Dann klappts auch mit der Kommastelle.

traderdoc

Indikator-Trading 08.08.20 22:09

Zitat:

Zitat von MA-EA (Beitrag 44196)
Das einfachste wär wohl, sie so oft mit 2 zu dividieren oder zu multiplizieren, bis die letzte Stelle 0 oder 5 ist

Hm, rechnen wirs mal durch.
Ist 6 grade?
MA-EA Lösungsweg:
6*2=12
12*2=24
24*2=48
Weitere Ergebnisse:
96,192,364,768,.....,422212465065984,...,usw
Endet davon was mit 5 oder 0 -> Nein
6 ist somit ungerade!
Mathematik ist schon was tolles oder?

traderdoc 08.08.20 22:41

Zitat:

Zitat von MA-EA (Beitrag 44196)
Hallo.
Hab über nen Weg nach gedacht, wie man von beliebigen double Werten rausfinden kann, ob sie gerade oder ungerade sind. Das einfachste wär wohl, sie so oft mit 2 zu dividieren oder zu multiplizieren, bis die letzte Stelle 0 oder 5 ist. :confused: Keine Ahnung, brauch auch Mathe-Nachhilfe. :rolleyes:

Ok, ich nehme jetzt mal das Zitat ganz ernst und beachte im Satzbau die wiederholten "oder" und schlussfolgere, dass der Nachhilfling in der Oder-Verknüpfung der fettmarkierten Stellen ein Logik sieht.

Nehmen wir wieder die 6:
6/2=3
3/2 = 1,5
1,5/2=0,75
0,75/2=0,375
0,375/2=0,1875

Ich glaube fest daran, dass die letzte Stelle keine 0 ergeben wird.
Nein halt doch! Man könnte ja auch
6/2=3.0 schreiben -> also dann doch eine gerade Zahl!

Nehmen wir nun die 16:
16/2=8,0

Also auch eine gerade Zahl!

Nun nehmen wir mal 17:
17/2 = 8,50

Endet auf 0 -> also auch eine gerade Zahl!

@Indicator-Trading hatte gerade herausgefunden, dass die 6 ungerade sein muss. Hm, ich komme zu dem Ergebnis, es existieren nur gerade Zahlen, weil alle Divisionen auf eine 0 enden.

Was nun Herr Gauß?

traderdoc

AVT 09.08.20 12:44

Zitat:

Zitat von traderdoc (Beitrag 44198)
Nun, bei der Division einer Integerzahl stolpern tatsächlich viele und ja, die Integerzahl müsste dann vorher in eine double gewandelt werden.

Eine Zusatzfrage bitte: Ist das allgemeine Programmiersprachen Praxis, daß Integerdivisionen immer Integerergebnisse liefern, oder ist das von Sprache zu Sprache verschieden?
Danke. AVT

Indikator-Trading 09.08.20 14:07

Ich würde sagen dass das interne Abhandeln der Division abhängig vom Compiler ist. Manche erkennen das automatisch. Hier ist es halt leider nicht so intelligent das der Compiler erkennt, dass du eine Division durchführst und das direkte Ergebnis ausgeben möchtest.


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:16 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum