c - -1.0 和 1.0 之间的 double 有多少位精度?

标签 c casting double precision

在我看过的一些音频库中,音频样本通常表示为范围为 -1.0 到 1.0 的 double 或 float 。在某些情况下,这很容易让分析和综合代码抽象出底层数据类型实际上可能是什么(signed long int、unsigned char 等)。

假设 IEEE 754,我们的密度不均匀。随着数字接近零,密度增加。这意味着我们对接近 -1 和 1 的数字精度较低。

如果我们可以为我们正在转换的基础数据类型表示足够数量的值,那么这种不均匀的数字密度并不重要。

例如,如果底层数据类型是 unsigned char,我们只需要 256 个介于 -1 和 1(或 8 位)之间的值——使用 double 显然不是问题。

我的问题是:我有多少位精度?我可以安全地转换为 32 位整数或从 32 位整数转换而不会丢失吗?为了扩展这个问题,值的范围必须是多少才能安全地转换为 32 位整数或从 32 位整数无损失地转换?

谢谢!

最佳答案

对于 IEEE double ,您有一个 53 位尾数,足以表示 32 位整数,被视为介于 -1 (0x80000000) 和 1 - 2^-31 (0x7FFFFFFF) 之间的定点数。

float 有 24 位尾数,这是不够的。

关于c - -1.0 和 1.0 之间的 double 有多少位精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959902/

相关文章:

c - 请求非结构或 union 中的成员 'x' 和段错误(丢失)

CS50 恢复段错误问题

java - ksoap 从 int 传递一个 long 值

c - 如何读取实数输入并使用它们

c - 指向 union 中允许的类似布局的功能的指针?

c++ - 我们真的 grep c++​​ 风格转换吗?

c++ - 仅调用派生类的析构函数

java - 双 d=1/0.0 对比双 d=1/0

c - Scanf/Printf双变量C

CMSIS-驱动外设