标签: underflow

计算多个数字的几何平均值的有效方法

我需要计算一大组数字的几何平均值,其值不是先验有限的.天真的方式是

double geometric_mean(std::vector<double> const&data) // failure
{
  auto product = 1.0;
  for(auto x:data) product *= x;
  return std::pow(product,1.0/data.size());
}
Run Code Online (Sandbox Code Playgroud)

但是,由于累积的下溢或溢出,这可能会失败product(注意:long double并不能真正避免这个问题).那么,下一个选择是总结对数:

double geometric_mean(std::vector<double> const&data)
{
  auto sumlog = 0.0;
  for(auto x:data) sum_log += std::log(x);
  return std::exp(sum_log/data.size());
}
Run Code Online (Sandbox Code Playgroud)

这可行,但需要调用std::log()每个元素,这可能很慢.我可以避免吗?例如,通过跟踪(相当于)指数和product单独累计的尾数?

c c++ algorithm numerical underflow

28
推荐指数
2
解决办法
6794
查看次数

关于无符号整数下溢的C行为的问题

我已经在很多地方读过,整数溢出在C中定义得很好,与签名对应物不同.

下溢是一样的吗?

例如:

unsigned int x = -1; // Does x == UINT_MAX?
Run Code Online (Sandbox Code Playgroud)

谢谢.

我不记得在哪里,但我在某处读到无符号整数类型的算术是模块化的,所以如果是这种情况那么-1 == UINT_MAX mod(UINT_MAX + 1).

c types integer integer-overflow underflow

18
推荐指数
1
解决办法
2万
查看次数

C:什么是缓冲区下溢的例子?

我知道缓冲区溢出是什么.我不知道缓冲区下溢是什么.

我猜它是一个特定的缓冲区接收而不是字节溢出,字节下溢.

char buffer[8];
fgets(buffer, sizeof(buffer), stdin);
Run Code Online (Sandbox Code Playgroud)

以上将不会出错.

char buffer_overflow[8];
fgets(buffer_overflow, 16, stdin);
Run Code Online (Sandbox Code Playgroud)

如果用户输入是例如"deutschland",则上述将导致缓冲区溢出.

我可以在代码中获得一个示例,缓冲区下溢是什么?

c underflow

16
推荐指数
2
解决办法
1万
查看次数

处理R中的非常小的数字

我需要计算一个非常小的数字列表,如

(0.1)^ 1000,0.2 ^(1200),

然后将它们归一化,使它们总结为一个ie

a1 = 0.1 ^ 1000,a2 = 0.2 ^ 1200

我想计算a1'= a1 /(a1 + a2),a2'= a2(a1 + a2).

我遇到了下溢问题,因为我得到a1 = 0.我怎么能绕过这个?从理论上讲,我可以处理日志,然后log(a1)= 1000*log(0.l)将是一种表示没有下溢问题的方法 - 但为了规范化我需要得到log(a1 + a2) - 我无法计算,因为我不能直接代表a1.

我用R编程 - 据我所知,c#中没有数据类型如Decimal,它可以让你比双精度值更好.

任何建议将不胜感激,谢谢

r underflow

15
推荐指数
2
解决办法
1万
查看次数

Javascript是否处理整数溢出和下溢?如果有,怎么样?

我们知道Java不处理下溢和溢出,但是Javascript如何处理整数?

它会回到最小/最大?如果是,最低/最高?

我需要拆分一个字符串并根据其字符计算一个哈希值.

javascript integer overflow underflow

15
推荐指数
2
解决办法
1万
查看次数

什么时候发生下溢?

我遇到计算1.77e-308/10触发下溢异常的情况,但计算1.777e-308/10没有.这很奇怪,因为:

当浮点运算的真实结果的幅度(​​即,接近于零)小于目标数据类型中可表示为正常浮点数的最小值(来自算术下溢,维基百科)时,会发生下溢

换句话说,如果我们计算出x/y其中两个xydouble,那么应该发生溢如果0 < |x/y| < 2.2251e-308(最小正正规化double2.2251e-308).从理论上说,因此,无论是1.77e-308/101.777e-308/10应触发溢异常.该理论与我在下面的C程序中测试的内容相矛盾.

#include <stdio.h>
#include <fenv.h>
#include <math.h>


int main(){
  double x,y;

  // x = 1.77e-308 => underflow
  // x = 1.777e-308 gives  ==> no underflow
  x=1.77e-308;

  feclearexcept(FE_ALL_EXCEPT);
  y=x/10.0;
  if (fetestexcept(FE_UNDERFLOW)) {
    puts("Underflow\n");
  }
  else puts("No underflow\n");
}
Run Code Online (Sandbox Code Playgroud)

为了编译程序,我使用了gcc program.c -lm; 我也尝试过Clang,它给了我相同的结果.任何解释?

[编辑]我通过这个在线IDE分享了上面的代码.

c floating-point floating-point-exceptions underflow

15
推荐指数
1
解决办法
2201
查看次数

常见的下溢和溢出异常

我试图在java中获得溢出和下溢异常,但无法获得任何好的教程.具体来说,我想学习

  1. 它们彼此有什么不同?
  2. 这些例外的子类是什么?
  3. 在哪种情况下他们被抛出?
  4. 哪些可以处理以及如何处理?
  5. 与他们相关的最佳实践是什么?

任何有用教程的链接都可以

java exception overflow underflow

13
推荐指数
2
解决办法
3万
查看次数

如何在没有下溢的情况下计算对数空间中的总和?

我正在尝试计算log(a + b)给定log(a)log(b)。问题是,log(a)而且log(b)非常消极,以至于当我尝试计算ab它们自己时,它们下溢,我得到log(0),这是未定义的。

对于log(a * b)and log(a / b),这不是问题,因为log(a * b) = log(a) + log(b)and log(a / b) = log(a) - log(b)。有没有类似的方法来计算log(a + b)而不需要ab他们自己,避免下溢?

language-agnostic floating-point precision logarithm underflow

12
推荐指数
1
解决办法
330
查看次数

如何避免GC环境中自定义NSURLProtocol中_NSCFURLProtocolBridge中的引用计数下溢

基础是我有一个习惯NSURLProtocol.在startLoading,[self client]类型:

<_NSCFURLProtocolBridge> {NSURLProtocol, CFURLProtocol}
Run Code Online (Sandbox Code Playgroud)

问题是在垃圾收集环境中运行.因为我正在写一个屏幕保护程序,所以我不得不把它垃圾收集起来.但是,_NSCFURLProtocolBridge协议似乎总是抛出:

malloc: reference count underflow for (memory_id_here), break on auto_refcount_underflow_error to debug

调试控制台的示例转储是:

ScreenSaverEngine[1678:6807] client is <_NSCFURLProtocolBridge 0x20025ab00> {NSURLProtocol 0x200258ec0, CFURLProtocol 0x20029c400} ScreenSaverEngine(1678,0x102eda000) malloc: reference count underflow for 0x20025ab00, break on auto_refcount_underflow_error to debug.

您可以看到发生了下溢<_NSCFURLProtocolBridge 0x20025ab00>.

当我突破时auto_refcount_underflow_error,它似乎堆栈追溯到URLProtocolDidFinishLoading::

id client = [self client];
...
[client URLProtocolDidFinishLoading:self];
Run Code Online (Sandbox Code Playgroud)

这个问题似乎已经存在了一段时间,但在网上似乎没有任何答案:

http://lists.apple.com/archives/cocoa-dev/2008/May/msg01272.html http://www.cocoabuilder.com/archive/message/cocoa/2007/12/17/195056

该错误仅在垃圾收集环境中显示这些列出的错误.有关如何在不引起内存问题的情况下解决此问题的任何想法?我假设这可能与NSURLProtocol下面的CF类型不正确地发布有关?

garbage-collection memory-management objective-c underflow

11
推荐指数
1
解决办法
3405
查看次数

检查C++中的下溢/溢出?

是否有一般方法来检查给定数据类型(uint32,int等)的溢出或下溢?

我正在做这样的事情:

uint32 a,b,c;
... //initialize a,b,c
if(b < c) {
   a -= (c - b)
}
Run Code Online (Sandbox Code Playgroud)

当我在一些迭代后打印时,它会显示一个很大的数字,如:4294963846.

c++ overflow integer-overflow underflow

10
推荐指数
1
解决办法
1万
查看次数