一尘不染

使用2个“ float”模拟“ double”

algorithm

我正在为仅支持32位单精度浮点算术的嵌入式硬件编写程序。但是,我正在实现的算法需要64位双精度加法和比较。我试图double使用2的元组模拟数据类型float。因此,a
double d将被模拟为struct包含元组的:(float d.hi, float d.low)

使用字典顺序可以进行比较。但是,添加操作有些棘手,因为我不确定应该使用哪个库。应该是FLT_MAX吗?而我该如何检测进位?

如何才能做到这一点?


编辑(清晰度): 我需要额外的有效数字而不是额外的范围。


阅读 334

收藏
2020-07-28

共1个答案

一尘不染

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计算的扩展精度浮点数。

2020-07-28