问题标签 [divide-by-zero]
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.
java - 做符号回归时如何防止除以零?欧洲法院
我正在编写一个遗传程序来对公式执行符号回归。我正在使用ECJ。请参阅 ECJ 附带的示例教程 4,了解这是什么以及我开始使用的基础的示例。
将除法作为您的基因程序的一项功能时,问题就出现了。你如何防止除以零?
c++ - C++ 双除以 0.0 与 DBL_MIN
求双精度的平方根反比时,将无效的非正输入钳制在 0.0 或 MIN_DBL 是否更好? (在我下面的示例中double b
,由于浮点舍入误差和物理定律在游戏中稍微有些捏造,最终可能会变成负数。)
除以 0.0 和 MIN_DBL 在游戏中产生相同的结果,因为1/0.0
和1/DBL_MIN
实际上是无穷大。我的直觉说 MIN_DBL 是更好的选择,但有任何情况下使用 0.0 吗?可能和乘法一样sqrt(0.0)
,因为它们是特殊情况,所以执行速度更快。1/0.0
1.#INF000000000000
MSVC中的双除法:
java - 1/0 是合法的 Java 表达式吗?
以下在我的 Eclipse 中编译得很好:
Java 甚至一开始就阻止了许多“愚蠢的代码”(例如"Five" instanceof Number
不编译!),所以这甚至没有产生像警告一样多的事实让我感到非常惊讶。当您考虑允许在编译时优化常量表达式这一事实时,这种阴谋就会加深:
在 Eclipse 中编译,上面的代码片段生成以下字节码 ( javap -c Div0
)
如您所见,i
andk
赋值被优化为编译时常量,但除以0
(必须在编译时检测到)只是按原样编译。
javac 1.6.0_17
行为更加奇怪,静默编译,但将分配i
完全k
从字节码中删除(可能是因为它确定它们没有在任何地方使用)但保持1/0
原样(因为删除它会导致完全不同的程序语义)。
所以问题是:
- 实际上是
1/0
一个可以随时随地编译的合法 Java 表达式吗?- JLS 对此有何评论?
- 如果这是合法的,有充分的理由吗?
- 这可能有什么好处?
c - 除以 1/非常小的浮点数时会发生坏事吗?
如果我想检查正浮点 A 是否小于另一个正浮点 B 的平方反比(在 C99 中),如果 B 非常小,会出现问题吗?
我可以想象检查它像
但是如果 B 足够小,这可能会导致无穷大吗?如果发生这种情况,代码是否仍能在所有情况下正常工作?
以类似的方式,我可能会这样做
...这可能会稍微好一些,因为如果 B 很小, B*B 可能为零(这是真的吗?)
最后,我无法想象是错误的解决方案是
我认为这不会导致零除法,但如果 A 接近于零,仍然可能会出现问题。
所以基本上,我的问题是:
- 如果 X 大于零(但很小),那么 1/X 是否可以无穷大?
- 如果 X 大于零,X*X 可以为零吗?
- 与无穷大的比较会按照我期望的方式进行吗?
编辑:对于那些想知道的人,我最终做了
我是按这个顺序做的,因为它在视觉上是明确的,哪个乘法首先发生。
c++ - 除以零:在 C 和/或 C++ 中定义的未定义行为或实现?
关于除以零,标准说:
C99 6.5.5p5 - / 运算符的结果是第一个操作数除以第二个的商;% 运算符的结果是余数。在这两种操作中,如果第二个操作数的值为零,则行为未定义。
C++03 5.6.4 - 二元 / 运算符产生商,二元 % 运算符产生第一个表达式除以第二个表达式的余数。如果 / 或 % 的第二个操作数为零,则行为未定义。
如果我们从表面上看上面的段落,答案显然是两种语言的未定义行为。但是,如果我们进一步查看 C99 标准,我们会看到以下段落似乎是矛盾的 (1):
C99 7.12p4 - 宏 INFINITY 扩展为浮点类型的常量表达式,表示正或无符号无穷大(如果可用);
标准是否有某种黄金法则,即未定义的行为不能被(可能)矛盾的陈述所取代?除此之外,我认为如果您的实现定义了 INFINITY 宏,那么除以零被定义为这样的结论是不合理的。但是,如果您的实现没有定义这样的宏,则行为是未定义的。
我很好奇这两种语言在这个问题上的共识是什么(如果有的话)。如果我们谈论整数除法int i = 1 / 0
与浮点除法,答案会改变float i = 1.0 / 0.0
吗?
注意 (1) C++03 标准谈到了<cmath>
包含 INFINITY 宏的库。
php - PHP,如何捕捉除以零?
我有一个必须动态创建的大型数学表达式。例如,一旦我解析了“某事”,结果将是一个字符串,如:"$foo+$bar/$baz";
。
所以,为了计算那个表达式的结果,我使用了这个eval
函数......像这样:
这里的问题是,有时我会收到错误,说有一个被零除,我不知道如何捕获该异常。我试过这样的事情:
或者:
但它不起作用。那么,当除以零时,如何避免我的应用程序崩溃?
编辑:
首先,我想澄清一点:表达式是动态构建的,所以如果分母为零,我不能只求值。所以...关于马克贝克的评论,让我举个例子。我的解析器可以构建这样的东西:
解析器逐步构建字符串,而不用担心变量的值......所以在这种情况下,如果$foz == $bak
实际上有一个除以零:$baz / ( 0 )
.
另一方面,正如皮特建议的那样,我尝试了:
但它不打印任何东西。
math - 为什么 0 除以 0 是错误的?
我在代码中进行的计算中遇到了这个问题,如果除数也为 0,则除数为 0。在我的代码中,我为这种情况返回 0。我想知道,虽然除以零通常是未定义的,为什么不为这种情况破例呢?我的理解为什么除以零是不确定的,基本上是它不能被逆转。但是,我在 0/0 的情况下没有看到这个问题。
编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,即基于它获得了很多选票这一事实而过分急切地接受了一个答案。我现在接受了AakashM 的回答,因为它提供了一个关于如何分析问题的想法。
sql - 当语法似乎正确时,轻松 SQL 除以零
我正在使用以下语法:
但是我仍然收到此错误:
消息 8134,级别 16,状态 1,行 3 遇到除以零错误。
我在这里做错了什么?
我的整个查询如下:
sql-server-2005 - SQL Server:如何在查询中处理除以 0 的情况
我有一个看起来像这样的查询,它得到一个百分比:
在正常情况下,这可能会返回类似 59.77803 的内容。但事实证明,当第二个 SUM(分母)可能为 0 时,存在(正确的)情况。有谁知道一种方法来解释这种情况并避免除以 0 异常?
我正在使用 SQL Server 2005。谢谢。
c++ - 是否有一个 C/C++ 函数可以安全地处理除以零?
我们有一种情况,我们想要对两个值w1和w2进行加权平均,基于其他两个值v1和v2离零的距离......例如:
- 如果v1为零,则根本不会加权,因此我们返回w2
- 如果v2为零,则根本不会加权,因此我们返回w1
- 如果两个值都离零很远,我们做一个平均并返回 ( w1 + w2 )/2
我继承了如下代码:
对于一些背景知识,v1 和 v2 表示两个不同的旋钮转动了多远,它们各自合成效果的权重仅取决于它们转动了多少,而不是朝哪个方向转动。
显然,这在 时会出现问题v1==v2==0
,因为我们最终return (0/0)*w1 + (0/0)*w2
会遇到而您不能这样做 0/0
。进行特殊测试在v1==v2==0
数学上听起来很可怕,即使浮点数的做法也不错。
所以我想知道如果
- 有一个标准库函数来处理这个
- 有一个更简洁的数学表示