Я пишу программу для встроенного оборудования, которое поддерживает только 32-разрядную арифметику с плавающей запятой с одинарной точностью. Однако алгоритм, который я реализую, требует 64-битного сложения и сравнения с двойной точностью. Я пытаюсь подражать типу double
datatype, используя кортеж из двух float
s. Таким образом, double d
будет эмулироваться как struct
, содержащий кортеж: (float d.hi, float d.low)
.
Сравнение должно быть простым, используя лексикографическое упорядочение. Однако добавление немного сложно, потому что я не уверен, какую базу я должен использовать. Должно ли это быть FLT_MAX
? И как я могу обнаружить перенос?
Как это можно сделать?
Изменить (Ясность): мне нужны дополнительные значащие цифры, а не дополнительный диапазон.