(Я поки що позначив питання "С", але якщо ви знаєте іншу мову, яка підтримує спілки, ви також можете використовувати це.)
Ваше завдання - побудувати чотири стандартних математичних операторів + - * /
для наступної структури:
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;}
}
таким чином, що самі операції коли-небудь маніпулюють або отримують доступ до цілої частини (тому ніякого порівняння з подвійним не відбувається будь-коли під час операції), і результат точно такий же (або функціонально еквівалентний у випадку нечислових результатів, таких як NaN
) так, ніби відповідна математична операція була застосована прямо double
натомість.
Ви можете вибрати, якою цілою частиною керувати, можливо, навіть використовуючи різні з різних операторів. (Ви також можете видалити "без підпису" з будь-якого з полів союзу, хоча я не впевнений, чи бажаєте ви це зробити.)
Ваш бал - це сума довжини коду в символах для кожного з чотирьох операторів. Виграє найнижчий рахунок.
Для тих, хто нам не знайомий зі специфікацією IEEE 754, ось стаття про це у Вікіпедії.
Зміни:
03-06 08:47 Додано конструкторів до структури intfloat. Ви можете використовувати їх для тестування, а не вручну встановлювати подвійний / і т.д.
intstruct
точки зору uint8_8
, uint16_t
і так далі , як абсолютних розмірів short
, int
і так далі не визначені стандартом (кожен тип має мінімальний розмір і існує строгий порядок в розмірах, але Це воно).