我有一个需要两个输入的I2C设备:分母和分子.两者都写入单独的地址,因此不进行实际的计算(numerator/denominator).这样做的问题是在I2C器件上可能会出现除零,因此需要检查除零误差.理想情况下,如果划分由java代码完成,则会发生完全相同的事情.
目前,我已经提供了一个未使用的变量进行划分,但我担心它会被优化掉:
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
Run Code Online (Sandbox Code Playgroud)
当然有更好的方法!
什么是在接受用户输入的javascript中防止除以0的最佳方法.如果没有特定的方法来实现这一点,那么处理这种情况的最佳方法是什么,以免阻止其他脚本执行?
任何见解都非常感谢.
我在我的代码中进行的计算中遇到了这个问题,如果divident也为0,则除数为0.在我的代码中,我返回0表示该情况.我想知道,虽然除零通常是未定义的,为什么不对这种情况作出例外?我理解为什么除零是不确定的基本上是它无法逆转.但是,在0/0的情况下我没有看到这个问题.
编辑好了,所以这个问题产生了很多讨论.我犯了一个错误,就是因为它得到了很多选票而过于急切地接受了答案.我现在接受了AakashM的答案,因为它提供了如何分析问题的想法.
我有以下方法来计算平均值:
def compute_average(a,b,c,d,e)
total = [a,b,c,d,e].sum.to_f
average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
average.round(2)
end
Run Code Online (Sandbox Code Playgroud)
这没什么特别的,但它有一个问题,我期望所有平均方程都有:如果输入全为零,它可能除以零.
所以,我想到这样做:
def compute_average(a,b,c,d,e)
total = [a,b,c,d,e].sum.to_f
if total==0
average = 0.00
else
average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
average.round(2)
end
end
Run Code Online (Sandbox Code Playgroud)
......这样可行,但对我来说感觉很糟糕.有没有更优雅的"Ruby Way"来避免这种划分为零的问题?
我希望我拥有的是"除非那么"的操作员,比如......
average = numerator / denominator unless denominator == 0 then 0
Run Code Online (Sandbox Code Playgroud)
有什么建议?
它是否只是在每次完成除法时检查除数是否与零不同(即使在JIT编码中)?
我的意思是VM如何在不被操作系统杀死的情况下设法抛出异常?
我正在经历一个意外的行为,并希望有人可以帮助提供一些关于调查重点的领域的指导.
我有两种方法,一种基本上对double执行除零测试,第二种extern方法为非托管dll 调用方法.
注意:在.Net运行时中,将Double除以零应该返回Infinity值(有趣或正面或负面).
我正在做的伪代码看起来像这样:
InfinityTest(); // Returns an Infinity value as expected
DllCall();
InfinityTest(); // Divide by zero error on second call.
Run Code Online (Sandbox Code Playgroud)
第一次调用InfinityTest()返回值Infinity按预期方式.第二次调用InfinityTest()抛出了一个我没想到的Divide by Zero异常.
更新
下面的有效InfinityTest()代码.为简洁起见,我删除了try/catch元素等.我没有权限详细了解DllCall()伪代码元素,道歉.
private double InfinityTest()
{
double a = 1.0;
int b = 0;
return a / b;
}
Run Code Online (Sandbox Code Playgroud) 我正在进行长时间的模拟.我将结果记录到矢量中以计算有关数据的统计数据.我意识到,从理论上讲,这些样本可能是零除的结果; 这只是理论上的,我很确定情况并非如此.为了避免在修改代码后重新运行模拟,我想知道在这种情况下会发生什么.我是否能够意识到是否发生了0分裂?我会收到错误消息吗?(暂时没有处理例外情况).
谢谢
我有一个小的Haskell程序,很好奇为什么在运行它时会抛出除零异常(GHC 7.0.3)
import qualified Data.ByteString.Lazy as B
import Codec.Utils
convert :: B.ByteString -> [Octet]
convert bs = map (head . toTwosComp) $ B.unpack bs
main = putStrLn $ show $ convert $ B.pack [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
谁能帮我理解这里发生了什么?
在C程序中除以零会导致错误消息的异常终止Floating point exception (core dumped).这对于浮点除法并不足为奇,但为什么在整数除以零时会这样说呢?整数除法实际上是否使用引擎盖下的FPU?
(顺便说一下,这都是在x86下的Linux上.)
我的问题是关于try-catch块的简单除法示例.你看到第一行尝试?如果我将这两个变量中的任何一个转换为double,则程序无法识别catch块.在我看来,我是否必须执行捕获块.这段代码有什么问题?
public static void main(String[] args) {
int pay=8,payda=0;
try {
double result=pay/(double)payda; // if I cast any of the two variables, program does not recognize the catch block, why is it so?
System.out.println(result);
System.out.println("inside-try");
} catch (Exception e) {
System.out.println("division by zero exception");
System.out.println("inside-catch");
}
}
Run Code Online (Sandbox Code Playgroud) divide-by-zero ×10
java ×3
math ×2
.net ×1
c ×1
c# ×1
c++ ×1
division ×1
double ×1
exception ×1
haskell ×1
javascript ×1
refactoring ×1
ruby ×1
try-catch ×1