标签: divide-by-zero

我可以强制java在用浮点数除以零时抛出错误吗?

我写了一个模拟器,它有一些碰撞检测代码,并在检测到碰撞时对每个对象进行了很好的数学运算.

如果这两个对象位于完全相同的位置或者在一些罕见的其他情况下,我将NaN(不是数字)作为它们在线的某个位置,我想知道在哪里.通常,如果我对整数执行这些操作,程序会崩溃,但因为+和 - 无穷大是浮点规范的一部分,所以它是允许的.

所以,沿着这条线的某个地方,我采用负数的平方根或除以零.

无论如何,我可以让我的程序自动崩溃导致这个的操作,所以我可以缩小一些吗?

java floating-point divide-by-zero

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

为什么GCC在执行1/0时会报告浮点异常?

Stroustrup在"C++的设计和演变"(Addison Wesley,1994)中说,"低级事件,例如算术溢出和除以零,假定由专用的低级机制而不是异常处理这使得C++能够在算术运算时匹配其他语言的行为.它还避免了在流水线严重的体系结构中出现的问题,其中除以零之类的事件是异步的.

Q1:如果不是例外,为什么GCC会报告一个而不是一个较低级别的错误?

Q2:鉴于我正在划分整数,为什么报告为浮点数?

鉴于我无法用catch(...)来捕捉它,这是非常误导的.显然我可以测试并避免整个'错误',但我的观点是,对于一个认为它可能是异常(合理)的初学者来说,它是非常混乱的,试图抓住它,然后发现它不是异常,并且对报告的运行时异常感到奇怪.

我的编译器是gcc版本4.2.1(Apple Inc. build 5666)(第3点)

准确澄清CPU异常,FPU异常,语言异常和操作系统异常之间的区别可能会解决这个问题.

示例程序:

int main(){
    int i=1/0;
    return i;
}
Run Code Online (Sandbox Code Playgroud)

结果输出:

浮点异常

c++ exception divide-by-zero

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

使用 numpy.select 避免 div/0 错误

我正在尝试使用 numpy.select 有条件地将值分配给数组。然而,使用 select 需要计算所有可能的赋值,而不仅仅是相关的赋值,这可能会导致 div/0 错误,例如:

import numpy as np
def testfunc(z):
    conditionlist = [z < 0, z == 0, z > 0]
    choicelist = [1 / z, 0, 1 + z]
    return np.select(conditionlist, choicelist)

if __name__ == "__main__":

     print testfunc(np.array([0]))
Run Code Online (Sandbox Code Playgroud)

此代码将失败并出现 div/0 错误,尽管 1 / z(其中 z = 0)实际上不需要分配给返回的数组。

如何有条件地将值分配给 numpy 数组而不遇到 div/0 错误?循环是唯一的选择吗?

python numpy divide-by-zero

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

为什么awk会产生不同的除零结果,我该如何测试呢?

在mawk中除以零时我得到六个不同的结果:

$ echo | awk '{print -1/0 }' ; echo $?
-inf
0
$ echo | awk '{print 0/0 }' ; echo $?
-nan
0
$ echo | awk '{print 1/0 }' ; echo $?
inf
0
$ echo | awk '{printf ("%i\n", -1/0) }' ; echo $?
-2147483647
0
$ echo | awk '{printf ("%i\n", 0/0) }' ; echo $?
-2147483647
0
$ echo | awk '{printf ("%i\n", 1/0) }' ; echo $?
2147483647
0
Run Code Online (Sandbox Code Playgroud)

我得到每个案例的"成功"退出代码.

  1. 为什么会这样?
  2. 我能做些什么呢?在进行除法之前,我是否总是 …

error-handling awk divide-by-zero

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

除以零返回无穷大

我是编程的新手,我有一个除零的问题.代码中的注释中解释了问题.

public float Divide (float a, float b)
{
    if (!Equals (b, 0))
        return a / b;
    else
        return 0; // what should this return contains not to giving me back  infinite?
                  // But for example message that you can't divide by zero?
}
Run Code Online (Sandbox Code Playgroud)

c# divide-by-zero

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

C#%抛出DivideByZeroException

    public static List<int> getDenoms(long n)
    {
        List<int> result = new List<int>();
        for (int i = 1; i < n; i++)
        {
            if (n % i == 0)
            {
                result.Add(i);
            }
        }
        return result;
    }

    public static int getHighestPrime(List<int> seq)
    {
        int currentHigh = 1;
        foreach (int number in seq)
        {
            List<int> temp = getDenoms(number);
            if (temp.Count == 1)
            {
                if (number > currentHigh)
                {
                    currentHigh = number;
                }
            }
        }
        return currentHigh;
    }
Run Code Online (Sandbox Code Playgroud)

我将当前代码放在C#中.所以,我有两种方法.在getDenoms方法中,我假设语句n%i不会抛出任何错误,因为我大于或等于1,但确实会抛出该错误.

我以下列方式使用了这两种方法:

        Console.WriteLine(getHighestPrime(getDenoms(600851475143)));
Run Code Online (Sandbox Code Playgroud)

有关代码抛出该错误的原因的任何见解?

c# divide-by-zero

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

How to handle divide by zero in Oracle function

I'm getting a divide by zero error when I use this function. It compiles fine. Since I'm not using a select statement I'm assuming NULLIF isn't going to work. What can I use to avoid the divide by zero issue?

    OPEN GET_DATA;
    fetch GET_DATA into v_gpa_hsch,v_gpa_hsch_scale,v_gpa_scale,v_gpa,
     v_gpa_recalc,v_gpa_hsch_recalc;
    IF GET_DATA%NOTFOUND
    THEN
    IT_final_final_calc :=0;

    ELSE
            IF  v_gpa_hsch_scale < v_gpa_scale
            THEN IL_higher_scale_calc := v_gpa_scale;
            ELSE IL_higher_scale_calc := v_gpa_hsch_scale;
            END IF;

            IF v_gpa_hsch < v_gpa
            THEN IM_gpa_calc := v_gpa;
            ELSE IM_gpa_calc := v_gpa_hsch;
            END …
Run Code Online (Sandbox Code Playgroud)

oracle function fetch divide-by-zero

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

在REPL中除以零时会删除28个帧?

scala> 5 / 0
java.lang.ArithmeticException: / by zero
  ... 28 elided
Run Code Online (Sandbox Code Playgroud)

一个简单的算术表达式省略了二十八个帧?这些框架是什么?为什么Scala需要那么多框架来进行安全划分?为什么首先要消除它们?

scala divide-by-zero read-eval-print-loop

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

设置除以 0 返回 0

我突然想到 PL/SQL 可能有一种更简洁的方法来做到这一点:

我有一个程序可以被零除,但在所有情况下我都希望它返回 0。我当前的逻辑如下所示:

if bar <> 0 then
    foobar := foo/bar;
else
    foobar := 0;
end if;
Run Code Online (Sandbox Code Playgroud)

有谁知道更简单/更便宜的方法来做到这一点?我对 PL/SQL 还很陌生,我看到我可以使用异常处理程序,但这似乎跳过了操作。所以我想我可以破例zero_divide然后做:

foobar := 0;
foobar := foo/bar;
Run Code Online (Sandbox Code Playgroud)

不过,我担心这并不容易遵循。感谢您的任何见解!

oracle plsql divide-by-zero

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

在我的代码中除以零

我的代码,我无法弄清楚我在哪里得到除零问题.

mreviewApp.cpp

const int SIZE = 80;
const char DELIMIT = '|';

void parseLine(const char line[], string& title, int& rating);
void stringTrim(char st[]);
void printMrList(std::vector <Mreview> mrList);
Mreview searchTitle(std::vector <Mreview> &mrList, string title);


int main()
 {
  ifstream fin;

  fin.open("rating_list.txt");
  if (fin.fail()) {
    cerr << "Input file opening error.\n";
    exit(1);
  }

  char line[SIZE];
  string title;
  int rating;
  int lineCount = 0;

  std::vector <Mreview> mrList;

  /* Process one line at a time */
  // Read the first line
  fin.getline(line, SIZE);
  stringTrim(line);

  // …
Run Code Online (Sandbox Code Playgroud)

c++ divide-by-zero

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