Instant to mpq_class
-
Hallo zusammen,
bin relativ neu und versuche einen Code zu verstehe.
Wer kann mir das hier erklären, das gelingt mir nicht wirklich´Danke!
mpq_class ItoMPQ( const Instant i )
{
mpq_class res = mpq_class(0);
int days = (int)i.ToDouble();
const int rest = i.GetAllMilliSeconds();
const int milliseconds = 86400000;
res = days + mpq_class(rest, milliseconds);
res.canonicalize();
return res;
}
-
Ich bin verwirrt.
Geht es um ein inhaltliches oder ein syntaktisches Verständnisproblem?
-
Keine Ahnung was mpq_class ist => keine Erklärung möglich
Die Funktion wurde jedenfalls von einem Dilettanten geschrieben.
-
ich verstehe tatsächlich nicht, was insbesondere hier passiert
const int milliseconds = 86400000;
res = days + mpq_class(rest, milliseconds);
res.canonicalize();Ich kenne den Ersteller nicht, wie würdest du es machen?
-
Ohne, dass du uns den Code von mpq_class zeigst koennen wir Dir nicht helfen.
Am Besten auch von Instant i.
Ansonsten wird da ein const int mit einem Wert angelegt.
86400000 = 24 Stunden.Danach erfolgt anscheinend irgendeine Art von Addierung mit Hilfe eines überladenen Operators in mpq_class.
Danach wird Member-Funktion canonicalize aufgerufen, die anscheinend irgendein Format herstellt jedenfalls wuerde das der Name suggerieren.
Danach wird ein mpq_class per Kopie zurueckgegeben.
-
mpq_class ist ein Datentyp aus der GNU der sehr genau ist
Instant ??? keine Ahnung, mal schauen ob ich da was finden kann
-
Instant beeinhaltet eine Zeit
-
ich konnte genau finden:
typedef DateTime Instant;
in einem h-file
-
SusanneS schrieb:
Ich kenne den Ersteller nicht, wie würdest du es machen?
Mal kurz drüber gebügelt:
const int dayInMilliseconds = 86400000; mpq_class ItoMPQ( const Instant& i ) { int days = i.ToDouble(); mpq_class res = days + mpq_class( i.GetAllMilliSeconds(), dayInMilliseconds ); res.canonicalize(); return res; }
-
HI,
das verstehe ich besser.
Was passiert hier: res.canonicalize();UND wie würde daraus die Umkehrung aussehen?
Herzlichen Dank!
-
@manni: Erster Treffer bei Google: mpq_class ist die Dokumentation von GNU, auf der im Übrigen auch
canocicalize
definiert ist:Was passiert hier:
res.canonicalize();
Der Bruch wird gekürzt1. Die Umkehrung davon wäre demnach das Erweitern, i.e., die Multiplikation des Nenners und Zählers mit einer Ganzzahl ungleich 0 (
mpq_class
repräsentiert, wie du wissen solltest, Brüche mit ganzzahligen Zählern/Nennern).Außerdem wäre die Definition von
DateTime
nicht schlecht.1 Außerdem wird dafür gesorgt dass der Nenner positiv ist. Falls dir übrigens der Begriff "kürzen" in diesem Kontext nichts sagt, hast du ein Problem.
-
Vielen Dank!
Kürzen kenne ich