ToB企服应用市场:ToB评测及商务社交产业平台

标题: 浮点数算法的内部实现 [打印本页]

作者: 干翻全岛蛙蛙    时间: 2024-8-28 14:55
标题: 浮点数算法的内部实现
  科学计算当中会用到不少浮点数的操作,这些浮点数大概是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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4