我有一个故意执行除以零的程序(并将结果存储在一个易变的变量中),以便在某些情况下停止.但是,我希望能够禁用此暂停,而无需更改执行除零的宏.
有什么方法可以忽略它吗?
我试过用了
#include <signal.h>
...
int main(void) {
signal(SIGFPE, SIG_IGN);
...
}
Run Code Online (Sandbox Code Playgroud)
但它仍然会消息"浮点异常(核心转储)".
我实际上并没有使用该值,因此我并不关心分配给变量的内容; 0,随机,未定义......
编辑:我知道这不是最便携的,但它适用于在许多不同操作系统上运行的嵌入式设备.默认的暂停动作是除以零; 其他平台需要不同的技巧来强制看门狗引发重启(例如禁用中断的无限循环).对于PC(linux)测试环境,我想在不依赖断言之类的情况下禁用除零时停止.
根据两个其他值v1和v2远离零的距离,我们想要对两个值w1和w2进行一种加权平均的情况...例如:
我继承了以下代码:
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数学上对声音进行特殊测试是非常糟糕的,即使用浮点数做练习也不错.
所以我想知道是否
当整数除以零时,我们得到编译时错误;而在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) 我在 Xcode 4.5(llvm 4.1 编译器)中为 ios 5/6 开发了一个应用程序,并使用信号和异常处理程序来记录错误。但是我发现除以零永远不会引发 SIGFPE 信号。在linux系统上,我可以使用feenableexcept来设置陷阱。但这在ios中没有定义。
将适当的位设置为 fenv_t.__fpscr 不起作用,至少对于 iphone 4 和 3gs。
我有以下代码:
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中是否存在?
我有这个代码抛出错误:
<?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)
但它仍然给出了错误.有任何想法吗?
我正在尝试编写一个线性程序,并且需要一个等于 xc 符号的变量 z,其中 x 是另一个变量,而 c 是一个常数。
我考虑过z = (x-c)/|x-c|。不幸的是,如果 x=c,那么这会产生除以 0。
我不能使用 z=xc,因为我不想用 x 和 c 之间的差值来加权它。
有谁知道表达 z 的好方法,以便它是 xc 的符号?
感谢您的任何帮助和建议!
除以零(1/0、2/0、3/0等)产生无穷大。然而0/0产生NaN. 为什么?
我正在尝试实现一个区分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
我刚刚发现了一个奇怪的错误,只有在启用优化时才会发生错误(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)
很明显,模零操作会抛出一个被零除的异常,但为什么只有在代码编译时才会启用优化?