最大(和最小)16 位双精度值是多少?

What is the maximum (and minimum) 16-bit double value?

我正在研究音频数据处理(from/to WAV 文件,16 位),表示具有 double 值的样本(64位)。

由于我使用了大量的振幅域卷积,很多时候我得到的样本具有(正或负)值“高于”可以用 16 位表示的“最大数据”,结果是它们被截断了。

所以我需要规范化我的数据,然后再将其写入WAV文件。

但我不清楚可以用 16 位表示的最大(和最小)double 值是多少。

注意:这里我指的是最小值是16bits可以表示的最大负double数.

编辑:16-bits double 我指的是从 16 位 WAV 文件读取的数据,存储在我的代码中作为 double。经过振幅卷积后,这个数据恰好变得大于1或者小于-1。

What is the maximum (and minimum) 16-bit double value?

不清楚“16 位双精度”是什么意思。

C++ 中有一个数值类型double。它是一个浮点类型。 C++ 语言没有定义其最大或最小可表示值(尽管它确实定义了一个最小范围,实现可能会超过),但可以使用 std::numeric_limits.

检查这些限制

然而,在大多数系统上,double是一个 64 位类型,即 IEEE-754 标准中指定的“双精度”浮点类型。


一个16位类型最多可以表示216个不同的值。

如果用来表示无符号整数,则取值范围为[0, 216).

如果用于表示有符号整数,范围将取决于符号的表示方式。在最常见的 2 的补码表示中,范围将是 [-216-1、216-1)

WAV files

在Microsoft WAVE 格式中,16 位样本是2 的补码有符号整数。取值范围见上一段

简单的答案是你的分母(用于规范化 16 位数据)是 2^15,假设有符号 PCM。

将所有传入的 16 位数据除以 32767 是我的规范化解决方案。也许可以为32768做一个案例,因为数据范围从-32768到32767。但我一直使用32767.