我的项目遇到了这个错误,涉及使用数字音频信号.
所以我一直在获得振幅值,最近遇到了这个错误.当调试时遇到的幅度值为"-32768"时会发生这种情况.我将值存储在short []数组中.
我有一种预感,它与最大/最小值有关(我使用Math.Abs),但我不确定如何处理它.
有人可以帮忙吗?谢谢!
Dav*_*nan 22
16位带符号的int(short)取值介于-32,768和32,767之间.
否定-32768或获得绝对值,在16位有符号整数内是不可能的.值(32,768)大于最大可能正值(32,767).
我不想告诉您如何在不了解您正在使用的算法的更多细节的情况下解决问题.
-32768的绝对值是+32768 ...但是这超出了short... 的范围,因此出错.(你很幸运,你看到这是一个例外......遇到这种奇怪的其他方式会导致无声溢出,导致一些非常奇怪的结果)
选项:
int之前的呼叫Math.Abs你认为它有什么价值?没有32768in short-only 32767。
当然,您可以编写自己的方法:
public static short LossyAbs(short value)
{
if(value >= 0) return value;
if(value == short.MinValue) return short.MaxValue;
return -value;
}
Run Code Online (Sandbox Code Playgroud)
但这是有损的,因为它有点失去价值。也许更好的主意是:short.MinValue如果您打算(可能)否定它,请不要使用它。限制自己-32767会使这种情况消失。
| 归档时间: |
|
| 查看次数: |
9660 次 |
| 最近记录: |