渐变下溢程序的表示
Representation of a Gradual underflow program
我读到了关于渐变下溢的概念,以及它在音乐行业中的重要性渐变下溢在音乐中的应用
我很理解缓冲区溢出的问题,但我不知道如何表示下溢。
你能给我举一个例子吗(最好是用c或c++编写的程序),比如计算机如何处理逐渐下溢?
逐渐下溢与IEEE 754所称的"亚正常"数有关。
考虑使用科学记数法,其中有(比如)10位数的精度和范围从-99到99的指数。
在正常情况下,你把所有的东西都当作科学符号,所以如果你想表示1000,你就把它表示为1e3——也就是说,1*103。
现在,考虑一个像1.234e-102这样的数字。你能表示的最小指数是-99。所以,如果你用最简单的方法来完成你的工作,你只需要简单地说,因为它的指数比它小,所以它只是0。那将是"快速下溢"。
在IEEE 754(及相关标准)中,您可以将其存储为(本质上)0.00134*10-99。在这样做的过程中,与指数在-99…99范围内的常数值相比,您可能会损失一些精度。另一方面,与将其四舍五入为零相比,您损失的更少,因为它的指数小于-99。事实上,在这种情况下,它从4个有效数字开始,并且如图所示,它保留了所有4个有效位数。
在计算机上,数字是用二进制表示的,因此有效位数和/或指数的最大范围在转换为十进制时不是整数,但同样的基本思想也适用——当我们有一个太小而无法用正常格式表示的数字时,我们仍然可以用可以表示的最小指数来存储它,而且还包括一些前导零。
这确实导致了一个困难:数字通常以所谓的归一化形式存储。"有效位"部分通过左移直到第一个数字是1来进行归一化(请记住,由于它是二进制的,所以只能是0或1)。既然我们知道这是一个1,我们就有点作弊:我们通常不会在存储数字时将1存储在数字中。因此,双精度浮点数通常有53位精度,但实际上只有存储52位有效位。
有了一个低于正常值的数字,情况就不再是这样了。这并不是很难处理,但它仍然引入了一种特殊情况——而且这种情况很少被使用,所以CPU设计者(等等)很少尝试为此进行优化。因此,在对包含子规范的数据执行时,完全相同的代码可能会突然运行得慢很多。
- Mongodb c++驱动程序:如何查询元素的数组
- 表示"accepting anything for this template argument" C++概念的通配符
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- C++显示两个区间之间的数字的程序检查一个数字是否可以表示为两个素数的总和
- 这个简单的程序如何不表示递归?
- 如何从LLVM的中间表示中获取在程序的每个函数中执行的函数调用列表
- 编译C 程序时具有逻辑错误,该程序应将任意大的数字表示为字符串
- 用位表示整数类型大小的元程序
- 用 Big-O 表示法弄清楚我的程序的算法复杂性
- 如何在跨平台(Windows、iOS、Android)C++应用程序中表示字符串
- 渐变下溢程序的表示
- C++.NET包装程序:试图读取或写入受保护的内存.这通常表示其他内存已损坏
- 尝试在此测试分数程序上使用指针表示法而不是数组表示法,但我被困住了
- 什么是风寒公式的程序表示
- boost:: posix_time.如何在同一个应用程序中表示微秒和纳秒日期时间