(Ich habe die Frage vorerst mit "C" markiert, aber wenn Sie eine andere Sprache kennen, die Gewerkschaften unterstützt, können Sie diese auch verwenden.)
Ihre Aufgabe ist es, die vier mathematischen Standardoperatoren + - * /
für die folgende Struktur zu erstellen :
union intfloat{
double f;
uint8_t h[8];
uint16_t i[4];
uint32_t j[2];
uint64_t k;
intfloat(double g){f = g;}
intfloat(){k = 0;}
}
so, dass die Operationen selbst immer nur den ganzzahligen Teil manipulieren oder darauf zugreifen (so dass auch während der Operation kein Vergleich mit dem double möglich ist) und das Ergebnis genau dasselbe ist (oder funktional äquivalent bei nicht numerischen Ergebnissen wie NaN
). als ob die entsprechende mathematische Operation direkt auf die angewendet worden wäre double
.
Sie können auswählen, welcher ganzzahlige Teil bearbeitet werden soll, möglicherweise sogar unter Verwendung verschiedener Operatoren. (Sie können auch das "unsignierte" aus einem der Felder in der Union entfernen, obwohl ich nicht sicher bin, ob Sie das tun möchten.)
Ihre Punktzahl ist die Summe der Länge des Codes in Zeichen für jeden der vier Operatoren. Die niedrigste Punktzahl gewinnt.
Für diejenigen von uns, die mit der IEEE 754-Spezifikation nicht vertraut sind, ist hier ein Artikel darüber auf Wikipedia.
Bearbeitungen:
03-06 08:47 Konstruktoren zur Intfloat-Struktur hinzugefügt. Sie dürfen sie zum Testen verwenden, anstatt das double / etc. manuell einzustellen.
intstruct
in Bezug auf die uint8_8
, uint16_t
und so weiter , wie die absoluten Größen short
, int
und so weiter sind nicht durch den Standard definiert (jede Art hat eine Mindestgröße und es gibt eine strenge Ordnung in der Größe, aber das ist es).