(Na razie oznaczyłem pytanie „C”, ale jeśli znasz inny język, który obsługuje związki, możesz go również użyć).
Twoim zadaniem jest zbudowanie czterech standardowych operatorów matematycznych + - * /
dla następującej struktury:
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;}
}
tak, że same operacje zawsze manipulują lub uzyskują dostęp do części całkowitej (więc nie można porównywać z podwójną w dowolnym momencie podczas operacji), a wynik jest dokładnie taki sam (lub funkcjonalnie równoważny, w przypadku wyników nienumerycznych, takich jak NaN
) jakby double
zamiast tego zastosowano odpowiednią operację matematyczną .
Możesz wybrać, którą częścią całkowitą chcesz manipulować, być może nawet używając różnych spośród różnych operatorów. (Możesz także usunąć „niepodpisany” z dowolnego pola w unii, chociaż nie jestem pewien, czy chcesz to zrobić.)
Twój wynik to suma długości kodu w znakach dla każdego z czterech operatorów. Najniższy wynik wygrywa.
Dla tych z nas znają specyfikacji IEEE 754, tutaj jest artykuł o nim na Wikipedii.
Edycje:
03-06 08:47 Dodano konstruktory do struktury intfloat. Możesz używać ich do testowania, zamiast ręcznego ustawiania podwójnego / itp.
intstruct
w kategoriach uint8_8
, uint16_t
i tak dalej jako absolutnych rozmiarów short
, int
a więc nie są określone przez normę (każdy typ ma wielkość minimalną i istnieje ścisła kolejność pod względem wielkości, ale Otóż to).