标签: divide-by-zero

我可以忽略由除零产生的SIGFPE吗?

我有一个故意执行除以零的程序(并将结果存储在一个易变的变量中),以便在某些情况下停止.但是,我希望能够禁用此暂停,而无需更改执行除零的宏.

有什么方法可以忽略它吗?

我试过用了

#include <signal.h>
...
int main(void) {
  signal(SIGFPE, SIG_IGN);
  ...
}
Run Code Online (Sandbox Code Playgroud)

但它仍然会消息"浮点异常(核心转储)".

我实际上并没有使用该值,因此我并不关心分配给变量的内容; 0,随机,未定义......

编辑:我知道这不是最便携的,但它适用于在许多不同操作系统上运行的嵌入式设备.默认的暂停动作是除以零; 其他平台需要不同的技巧来强制看门狗引发重启(例如禁用中断的无限循环).对于PC(linux)测试环境,我想在不依赖断言之类的情况下禁用除零时停止.

posix signals sigfpe divide-by-zero

4
推荐指数
1
解决办法
4369
查看次数

是否有一个C/C++函数来安全地处理除零?

根据两个其他值v1v2远离零的距离,我们想要对两个值w1w2进行一种加权平均的情况...例如:

  • 如果v1为零,它根本没有加权,所以我们返回w2
  • 如果v2为零,它根本没有加权,所以我们返回w1
  • 如果两个值都等于零,我们进行平均值并返回(w1 + w2)/ 2

我继承了以下代码:

float calcWeightedAverage(v1,v2,w1,w2)
{
  v1=fabs(v1);
  v2=fabs(v2);
  return (v1/(v1+v2))*w1 + (v2/(v1+v2)*w2);
}
Run Code Online (Sandbox Code Playgroud)

对于一些背景,v1和v2表示两个不同旋钮的转动距离,它们各自的合成效果的加权仅取决于它们转动多少,而不是转向哪个方向.

显然,这有一个问题v1==v2==0,因为我们最终会结束return (0/0)*w1 + (0/0)*w2而你却做不到 0/0.在v1==v2==0数学上对声音进行特殊测试是非常糟糕的,即使用浮点数做练习也不错.

所以我想知道是否

  • 有一个标准的库函数来处理这个问题
  • 有一个更整洁的数学表示

c c++ math floating-point divide-by-zero

4
推荐指数
1
解决办法
3749
查看次数

Int vs Double并除以零异常

当整数除以零时,我们得到编译时错误;而在double的情况下,没有编译错误,但在运行时,我们得到无穷大/ NaN作为结果.知道为什么int和double在除零异常时会有不同的行为吗?

void Main()
{
    int number = 20;
    var result1 = number/0; // Divide by zero compile time exception

    double doubleNumber = 20;
    var result2 = doubleNumber/0.0; // no compile time error. Result is infinity or NaN
}
Run Code Online (Sandbox Code Playgroud)

.net c# divide-by-zero

4
推荐指数
1
解决办法
5286
查看次数

如何在 IOS 应用程序中除以零时启用 SIGFPE 信号?

我在 Xcode 4.5(llvm 4.1 编译器)中为 ios 5/6 开发了一个应用程序,并使用信号和异常处理程序来记录错误。但是我发现除以零永远不会引发 SIGFPE 信号。在linux系统上,我可以使用feenableexcept来设置陷阱。但这在ios中没有定义。

将适当的位设置为 fenv_t.__fpscr 不起作用,至少对于 iphone 4 和 3gs。

xcode exception-handling divide-by-zero ios

4
推荐指数
1
解决办法
1715
查看次数

防止在列表理解中除以零

我有以下代码:

scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)]
Run Code Online (Sandbox Code Playgroud)

我的问题是sum(confusion_matrix [idx])在某些情况下可能为0,从而导致a sum(matrix[i]).但因为ZeroDivisionError在这种情况下也是0,我解决了这个问题如下:

scores = [divide(matrix[i][i], sum(matrix[i])) for (i, scores) in enumerate(matrix)]
Run Code Online (Sandbox Code Playgroud)

matrix[i][i]如果divide(x, y)y == 0if ,函数返回1 (x / y).但我想知道是否有更简单的方法.也许我可以使用一些三元运算符,但在Python中是否存在?

python list-comprehension divide-by-zero

4
推荐指数
1
解决办法
714
查看次数

除零错误

我有这个代码抛出错误:

<?php

    $val1 = $totalsum;
    $res = ( $val1 / $val2) * 100;
    $val2 = count($allcontent);
    $res = ( $val1 / $val2) * 100;
    // 1 digit after the decimal point
    $res = round($res, 1); // 66.7

    echo "Success: ";
    echo $res;
    echo "%";

?>
Run Code Online (Sandbox Code Playgroud)

我试过添加这一行:

if ($res === 0) 
{ 
   echo "not eligible"; 
}
Run Code Online (Sandbox Code Playgroud)

但它仍然给出了错误.有任何想法吗?

php division divide-by-zero

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

线性规划 - 等于表达式符号的变量

我正在尝试编写一个线性程序,并且需要一个等于 xc 符号的变量 z,其中 x 是另一个变量,而 c 是一个常数。

我考虑过z = (x-c)/|x-c|。不幸的是,如果 x=c,那么这会产生除以 0。

我不能使用 z=xc,因为我不想用 x 和 c 之间的差值来加权它。

有谁知道表达 z 的好方法,以便它是 xc 的符号?

感谢您的任何帮助和建议!

linear-programming divide-by-zero

4
推荐指数
1
解决办法
2248
查看次数

为什么 Javascript 中 0/0 是 NaN 而不是无穷大

除以零(1/02/03/0等)产生无穷大。然而0/0产生NaN. 为什么?

javascript divide-by-zero

4
推荐指数
1
解决办法
5988
查看次数

python除以零在log - logistic回归中遇到

我正在尝试实现一个区分k不同类的多类逻辑回归分类器.

这是我的代码.

import numpy as np
from scipy.special import expit


def cost(X,y,theta,regTerm):
    (m,n) = X.shape
    J = (np.dot(-(y.T),np.log(expit(np.dot(X,theta))))-np.dot((np.ones((m,1))-y).T,np.log(np.ones((m,1)) - (expit(np.dot(X,theta))).reshape((m,1))))) / m + (regTerm / (2 * m)) * np.linalg.norm(theta[1:])
    return J

def gradient(X,y,theta,regTerm):
    (m,n) = X.shape
    grad = np.dot(((expit(np.dot(X,theta))).reshape(m,1) - y).T,X)/m + (np.concatenate(([0],theta[1:].T),axis=0)).reshape(1,n)
    return np.asarray(grad)

def train(X,y,regTerm,learnRate,epsilon,k):
    (m,n) = X.shape
    theta = np.zeros((k,n))
    for i in range(0,k):
        previousCost = 0;
        currentCost = cost(X,y,theta[i,:],regTerm)
        while(np.abs(currentCost-previousCost) > epsilon):
            print(theta[i,:])
            theta[i,:] = theta[i,:] - learnRate*gradient(X,y,theta[i,:],regTerm)
            print(theta[i,:])
            previousCost = currentCost
            currentCost …
Run Code Online (Sandbox Code Playgroud)

python logarithm machine-learning divide-by-zero logistic-regression

4
推荐指数
2
解决办法
7650
查看次数

为什么这个被零除错误只出现在优化代码中?

我刚刚发现了一个奇怪的错误,只有在启用优化时才会发生错误(g++ -O2).它是Arithmetic exception在以下代码中,当interval设置为零时(从命令行参数):

for(int i = 0; i < n; ++i) {
  if((i + 1) % interval == 0) { // exception here
    DoSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

很明显,模零操作会抛出一个被零除的异常,但为什么只有在代码编译时才会启用优化?

c++ compiler-construction optimization divide-by-zero

3
推荐指数
1
解决办法
1957
查看次数