(Я пометил вопрос «C» в настоящее время, но если вам известен другой язык, который поддерживает союзы, вы также можете использовать его.)
Ваша задача - построить четыре стандартных математических оператора + - * /
для следующей структуры:
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
вместо.
Вы можете выбрать, какой целочисленной частью манипулировать, возможно, даже используя разные операторы. (Вы также можете удалить «unsigned» из любого поля объединения, хотя я не уверен, что вы захотите это сделать.)
Ваша оценка - это сумма длины кода в символах для каждого из четырех операторов. Самый низкий балл побеждает.
Для тех из нас, кто не знаком со спецификацией IEEE 754, вот статья об этом в Википедии.
Редактирование:
03-06 08:47 Добавлены конструкторы в структуру intfloat. Вы можете использовать их для тестирования, а не вручную устанавливать двойной / и т. Д.
intstruct
точки зрения uint8_8
, uint16_t
и так далее , как абсолютных размеров short
, int
и так далее не определены стандартом (каждый тип имеет минимальный размер и существует строгий порядок в размерах, но Это оно).