0

在以下链接中提到了稳定的伪代码。我想在 C++ 中实现它。我无法理解和执行这些 signof 和 exponentof 以及 mantissaof 操作。

如何在主机和网络字节顺序之间转换双精度?

void htond (const double hostDouble, uint8_t result[8])
{
  result[0] = signOf(hostDouble);
  result[1] = exponentOf(hostDouble);
  result[2..7] = mantissaOf(hostDouble);
}
4

1 回答 1

0

要获得符号(即使是负零),请使用std::signbit().

要提取指数,请使用std::frexp()(或std::ilogb()用于非二次幂基数)。请注意,您必须将零、无穷大和 NaN 作为特殊情况处理。

尾数可以用std::abs(std::ldexp(value, -exponent))std::scalbn()或非二次方基数)获得;这将产生一个归一化的分数(范围取决于您用来提取指数的函数)。

于 2015-05-13T07:39:09.550 回答