问题标签 [underflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++下溢示例?
我目前正在学习 C++ 入门课程,教授给了我们以下示例:
现在,在他的机器上,TEST 作为整数的最大值返回,因为他强制下溢。但在我的机器上,它返回为 0。
这种行为编译器依赖还是什么?换句话说,为什么我的机器返回 0 而他的机器返回最大值?
c - When does underflow occur?
I get into a situation where calculating 1.77e-308/10
triggers an underflow exception, but calculating 1.777e-308/10
does not. This is strange because:
Underflow occurs when the true result of a floating point operation is smaller in magnitude (that is, closer to zero) than the smallest value representable as a normal floating point number in the target datatype (from Arithmetic Underflow, Wikipedia)
In other words, if we calculate x/y
where both x
and y
are double
, then underflow should occur if 0 < |x/y| < 2.2251e-308
(the smallest positive normalized double
is 2.2251e-308
). In theory, therefore, both 1.77e-308/10
and 1.777e-308/10
should trigger an underflow exception. The theory contradicts with what I have tested with the C program below.
To compile the program, I used gcc program.c -lm
; I also tried Clang, which gave me the same result. Any explanation?
[Edits] I have shared the code above via this online IDE.
c++ - C++ long long int 上溢/下溢
我正在制作一个解决基本数学运算(*
, /
, +
, -
)的小程序,并且我正在使用long long int
(64位数字),所以我可以对大数字进行数学运算。
但有一个问题。我可以检查操作数是否没有超过或低于限制(使用LONG_LONG_MAX
and LONG_LONG_MIN
)。但是当我(例如)将两个非常大的数字相乘(导致 溢出long long int
)时,LONG_LONG_MAX
检查不起作用。相反,结果是 -4。
C/C++ 中是否有机会检查?例如一些尝试捕获构造?
floating-point - 实数相乘时如何避免下溢?
当我像
我知道该underflow
选项并不总是一个好主意,但我想知道是否可以使用此选项进行乘法运算。事实上,在下面的示例中,我知道可能会发生下溢,但也许我不知道我的代码中有其他情况。这就是为什么我想尽可能保留这个选项。
这是一个示例,其中我为矩阵的每个 x,y 索引计算向量 u;组成这些向量的 2 个值介于 0 和 1 之间。然后我计算其范数的平方。
非常合乎逻辑,由于这个平方运算,我的值会下溢。因为,这些非常小的值对我来说可以被认为是零。有没有underflow
比使用if
比较更好的方法?
python - Python:pandas.DataFrame.comprod() 和 numpy.comprod() 是否处理数值下溢?
具体来说,当将大量小数相乘时,这些累积乘积函数是否以稳健的方式实现pandas
并处理下溢?numpy
例如,他们是否使用 log-sum-exp 技巧?
谢谢。
c++ - c++ 在减法期间转换为字节(unit8_t)不会像我预期的那样强制下溢;输出为 int16_t;为什么?
请注意,它byte
是 8 位类型 (uint8_t),而 unsigned int 是 16 位类型 (uint16_t)。
以下不会产生我期望的结果。我希望它会下溢并且结果始终是 uint8_t,但它会变成有符号的 int (int16_t)!!!!为什么?
特别关注以下代码行:(byte)seconds - tStart
我希望它的输出总是一个无符号的8 位值 (uint8_t),但它输出的是一个有符号的16 位值:int16_t。
如何使减法的结果始终为 uint8_t 类型?
样本输出:
第 1 列是(byte)seconds
,第 2 列是tStart
,第 3列是第 1 列减去第 2 列 ( (byte)seconds - tStart
) 请注意,一旦第 1 列从 255 溢出到 0,第 3 列变为负数 (int8_t)。我希望(并希望)它保持正数(无符号) 8 位值改为下溢。
这是typeNum
上面的函数:
python - 涉及非常小的数字的可能性
我有一个很大的可能性向量,都在范围内(0 到 1),但所有数字都比 1 小很多。我需要计算这些向量乘积的最大可能性。
我怎样才能避免下溢,我的装配工在我所有的尝试中都失败了。我采取的第一步是将数组除以数组中的最大值。我正在最大化采样 n 次的两个概率之和的乘积,最终我需要根据 BIC 最小化:
无论如何L
是一组非常小的形式的数组
这是一个带有两个参数的示例a
,b
我改变了数组的大小n
,每个参数p
都是< 1
.
numerical - Logsoftmax 稳定性
我知道如何通过添加元素 -max _i x_i 来使 softmax 稳定。这避免了上溢和下溢。现在,记录这个可能会导致下溢。log softmax(x) 可以计算为零,导致 -infinity。
我不知道如何解决它。我知道这是一个常见的问题。我看了几个答案,我不明白。但我仍然对如何解决这个问题感到困惑。
PS:如果你提供一个简单的例子,那就太棒了。
c# - C# ulong 允许上溢/下溢
我对这种ulong
类型的行为有点困惑。我理解它是一个64 位整数,用于正数(最大值 18,446,744,073,709,551,615)。我刚开始使用它是因为我需要非常大的正数,但是围绕潜在的负数有一些我不理解的奇怪行为。
这是怎么回事?为什么一些下溢错误被捕获而其他错误甚至不抛出异常?我可以检测到这些吗?
我专注于通过下溢来获得负数,但是在获得大于最大值和上溢的数字时,我也看到过类似的情况。
我不确定它们在技术上是错误还是异常,所以如果我使用了不正确的术语,请原谅我
algorithm - 在计算密度时训练具有下溢的连续密度 HMM
我已经按照 Rabiner 教程针对单个观察序列(基于 MFCC 数据)实现了 HMM 的评估和训练算法。对于前向和后向算法,我还包括了处理下溢问题的建议缩放。对于 Baum-Welch 优化,我相应地计算概率为
Baum-Welch 优化似乎在几次迭代中都能正常工作,直到我在计算密度时遇到下溢。我使用 Matlab 内置函数mvnpdf来计算密度。经过几次迭代后,Matlab 开始将最低密度设置为 0。对于 Baum-Welch 优化中的以下计算,Emission/PDF-Matrix 中的零条目产生 NaN,进一步优化失败。
对于如何规避或避免此问题的任何帮助,我将不胜感激。