浮点数算法的内部实现

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

  科学计算当中会用到不少浮点数的操作,这些浮点数大概是16位,32位,64位,80位乃至是128位。开源项目SoftFloat提供了一个高效的浮点运算实现,可以在没有硬件支持的情况下,高效模拟浮点数的各种操作。
  那么,浮点数之间的比较,根本运算这些究竟是怎么实现的呢,可以拿32位浮点数作为例子。
  这是32位浮点数加法的实现,起首声明了一个结构体float32_t。
  1. typedef struct { uint32_t v; } float32_t;
复制代码
  这提供了32位浮点数的底层位表示,同时还声明了一个union。
  1. union ui32_f32 { uint32_t ui; float32_t f; };
复制代码
  一方面保存了浮点数的位表示,另一方面也可以转换为32位无符号整型直接举行比较,这在背面的算法当中会直接涉及。先看看加法。
[code]float32_t f32_add( float32_t a, float32_t b ){    union ui32_f32 uA;    uint_fast32_t uiA;    union ui32_f32 uB;    uint_fast32_t uiB;#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1)    float32_t (*magsFuncPtr)( uint_fast32_t, uint_fast32_t );#endif    uA.f = a;    uiA = uA.ui;    uB.f = b;    uiB = uB.ui;#if defined INLINE_LEVEL && (1
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表