我正在为仅支持32位单精度浮点算术的嵌入式硬件编写程序。但是,我正在实现的算法需要64位双精度加法和比较。我试图double使用2的元组模拟数据类型float。因此,a double d将被模拟为struct包含元组的:(float d.hi, float d.low)。
double
float
double d
struct
(float d.hi, float d.low)
使用字典顺序可以进行比较。但是,添加操作有些棘手,因为我不确定应该使用哪个库。应该是FLT_MAX吗?而我该如何检测进位?
FLT_MAX
如何才能做到这一点?
编辑(清晰度): 我需要额外的有效数字而不是额外的范围。
double- float(双浮点)是一种使用成对的单精度数来实现几乎单精度算术精度两倍的技术,同时略微减小了单精度指数范围(由于该范围远端存在中间下溢和上溢) 。基本算法由TJ Dekker和William Kahan在1970年代开发。下面,我列出了两篇相当近期的论文,这些论文展示了如何将这些技术应用于GPU,但是这些论文中涵盖的许多材料都可以独立于平台使用,因此对于手头的任务应该是有用的。
https://hal.archives-ouvertes.fr/hal-00021443 Guillaume DaGraça,David Defour在第七届“实数与计算机”大会上,RNC7在图形硬件上实现了浮点运算符。
http://andrewthall.org/papers/df64_qf128.pdf Andrew Thall用于GPU计算的扩展精度浮点数。