有没有人可以推荐一些C++库/例程/包,其中包含维护各种浮点运算稳定性的策略? 例如:假设你想要对一个具有一百万个 long double 元素的向量/数组求和,每个数在区间 (0,1) 内且数量级相当。用朴素方法进行求和 for (int i=0;i<1000000;++i) sum...
我正在尝试在Java中实现一个版本的模糊C均值算法,并尝试通过仅计算可以仅计算一次的所有内容来进行优化。 这是一个迭代算法,关于矩阵更新,像素x聚类成员矩阵U(一行中的值之和必须为1.0),这是我想要优化的更新规则: 其中,x是矩阵X(像素x特征)的元素,v属于矩阵V(聚类x特征)。m...
我知道如何通过将-max _i x_i 添加到元素中来使softmax稳定。这可以避免溢出和下溢。现在,对此取对数可能会导致下溢。log softmax(x) 可能会评估为零,导致 - 无穷大。 我不确定如何解决它。我知道这是一个常见的问题。我读了几篇关于它的答案,但我还是不理解。但我仍然困...
对于某些在[-1, 1]范围内的实数b和c,我需要计算: sqrt( (b²*c²) / (1-c²) ) = (|b|*|c|) / sqrt((1-c)*(1+c)) 当c接近1或-1时,分母会出现灾难性取消。平方根也可能没有帮助。 我想知道是否有巧妙的技巧可应用于此处,以避免在c=1和c...
在GLSL中(具体来说是我使用的3.00版本),有两个版本的atan()函数:atan(y_over_x)只能返回从-PI/2到PI/2之间的角度,而atan(y/x)可以考虑所有四个象限,因此角度范围涵盖了从-PI到PI的所有内容,就像C++中的atan2()一样。 我想使用第二个atan...
chisq.test函数在R中为什么要在求和之前按降序排序数据? 有关的代码如下:STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE)) 如果我因使用浮点运算而担心数值稳定性,并希望使用一些易于部署的技巧,那么在求和之前按增加顺序对...
我正在使用CVXPY(版本1.0)解决一个二次规划(QP),但通常会出现以下异常:SolverError: 求解器“xxx”失败。请尝试另一个求解器。这使得我的程序非常脆弱。我已经尝试了不同的求解器,包括CVXOPT、OSQP、ECOS、ECOS_BB、SCS等。它们都或多或少存在相同的问题。...
我在C++中进行一些数学计算,看起来会生成一些非常接近于零的小数(我怀疑三角函数调用可能是我的真正问题),但我希望能够检测这些情况,以便更详细地研究它们。 我目前正在尝试以下内容,它正确吗?if ( std::abs(x) < DBL_MIN ) { log_debug("d...
我猜测有一些标准的技巧我没能找到:无论如何,我想以数值稳定的方式计算一个非常接近1(比如1-p,其中p < 1e-17)的大数次幂。在我的系统上,1-p被截断为1。 使用对数的泰勒展开式,我得到以下界限: exp(-np-np^2/2) ≤ exp(n*log(1-p)) ≤ exp(-n...
什么是最稳定的计算方式来计算: log[(wx * exp(x) + wy * exp_y)/(wx + wy)] 这里的权重 wx、wy > 0 是什么意思? 如果没有权重,这个函数就是 logaddexp,可以使用NumPy在Python中实现: tmp = x - y r...