首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在matlab中增强二次方程的鲁棒性

在matlab中增强二次方程的鲁棒性
EN

Stack Overflow用户
提问于 2019-01-06 05:50:40
回答 2查看 96关注 0票数 0

任务是在matlab中编写一个求解二次方程的代码。

我的代码在下面

代码语言:javascript
运行
复制
a=input('a=  ');
b=input('b=  ');
c=input('c=  ');
if a==0
    x=double(-c/b);
    disp(x)
else
    discriminant=b.^2-4*a*c;
    if discriminant<0
        error('Roots are not real')
    else
        e=sqrt(discriminant);
        x1=double((-b+e)/(2*a));
        x2=double((-b-e)/(2*a));
    end
end

disp(x1)
disp(x2)

现在,这给出了结果。然而,当遇到关于代码的“健壮性”以防止除以零、不必要的溢出和下溢、取消时,我如何修改代码?对于第一种情况,除以零,我的代码已经起作用了,但是他们所说的下溢/溢出意味着什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-07 08:02:10

当编程中的值开始占用额外和意外的内存单元时,就会发生溢出/下溢。在这种情况下,程序会遇到运行时错误,或者有时关闭自身以防止对系统的损害。为了避免这种严重的情况,应该管理程序退出或返回坏值函数或在需要时执行错误的代码。当然,这应该使用if-命令、返回破坏循环来完成。

附注:你的程序还存在缺陷。当a=b=0和c!=0时,它出现故障。我将您的代码转换为MATLAB中的一个函数(现在可以在命令窗口中调用该函数),并添加了一个MAX_VALUE以避免超出绑定的变量。

这是代码

代码语言:javascript
运行
复制
function x=quadroots(a,b,c,MAX_VALUE)
if nargin == 3
    MAX_VALUE=1e50;
end
if abs(a)>MAX_VALUE||abs(b)>MAX_VALUE||abs(c)>MAX_VALUE
    error('Out of bound variables')
end
if a==0 && b~=0
    x=double(-c/b);
    disp(x)
elseif a==0 && b==0 && c==0
    error('0=0')
elseif a==0 && b==0 && c~=0
    error('Infeasible solutions')
else
    discriminant=b.^2-4*a*c;
    if discriminant<0
        error('Roots are not real')
    else
        e=sqrt(discriminant);
        x(1)=double((-b+e)/(2*a));
        x(2)=double((-b-e)/(2*a));
    end
end
end
票数 1
EN

Stack Overflow用户

发布于 2019-01-07 04:25:42

假设我有一个变量,它是一个2位整数。现在,对于我的变量,我只能以小数点2^2作为我的最大数。让我们来看看2位是如何计算的:

代码语言:javascript
运行
复制
0 0 (add 1) --> 0 1
0 1 (add 1) --> 1 0
1 0 (add 1) --> 1 1
1 1 (add 1) --> 0 0

它会被打包回0 0,因为我已经用完了保存号码的位数,所以它重新开始了。这就是所谓的溢出。同样的情况也同样适用于底流,除非它被包装回最大值。对于matlab来说,比特数可以更大,比如32位或64位.那么,当你得到一个很大的数字输入,然后对它进行数学运算时,会发生什么呢?它会因为你的碎片用完而溢出吗?还是潜流?

FYI:如果你不懂二进制,你应该快速查看wiki来帮助解决,因为任何计算机语言中的所有数字都将被表示为位,但幸运的是,我们处理十进制值。

还有,有人在这里挥手。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54059001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档