首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lua程序在计算机和计算器上的不同之处

Lua程序在计算机和计算器上的不同之处
EN

Stack Overflow用户
提问于 2018-05-12 19:38:13
回答 2查看 251关注 0票数 2

我试图为我的TI-Nspire CX CAS创建一个简单的二次公式程序。我似乎所有的事情都是正确的,而且它在电脑上工作:

然而,它不能在计算器上工作。第二个正确,但第一个是-4.44089.e-16。(没有说.,只是因为我不想把整件事打印出来)

(简化的)代码如下:

代码语言:javascript
运行
复制
function quadraticA(f,s,t)
    return ((-1*s)+math.sqrt(s^2-4*f*t))/(2*f)
end
function quadraticB(f,s,t)
    return ((-1*s)-math.sqrt(s^2-4*f*t))/(2*f)
end
function on.paint(gc)
    formula:setExpression("0s: "..quadraticA(tonumber(a),tonumber(b),tonumber(c)))
    formulaB:setExpression(quadraticB(tonumber(a),tonumber(b),tonumber(c)))
end

为什么我在计算器上得到不同的答案而在计算机上得到不同的答案?我怎样才能解决这个问题?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 14:55:41

正如迪米特里所指出的,我必须从本质上写一个CAS引擎。以下是lua中的平方根简化:

代码语言:javascript
运行
复制
function factors(a)
    factorsOfA={}
    counter = 0
    for i = 1, a do
        counter = counter + 1
        if modulo(a,i) == 0 then
            factorsOfA[counter]=i
        end
    end
    return factorsOfA
end
function simplifySqrt(radicand)
    radicandFactors = factors(radicand)
    outsideRadicand = 1
    for m,i in pairs(radicandFactors) do
        if math.floor(math.sqrt(i))^2 == i then
            outsideRadicand = outsideRadicand * math.floor(math.sqrt(i))
        end
    end
    insideRadicand = radicand/outsideRadicand^2
    return outsideRadicand.."sqrt("..insideRadicand..")"
end

我希望这能帮到你!

票数 0
EN

Stack Overflow用户

发布于 2018-05-13 14:05:14

埃戈尔想说的是,大多数时候计算机都是不要计算精确的答案的。

德州仪器公司主要经营的是微控制器,所以我不希望你的设备内有通常的x86-64处理器。这意味着TI可以用自己的方式做很多事情。他们可以就如何处理小值、四舍五入、如何处理复杂的数学运算等问题作出自己的决定。

计算机现在至少使用32位浮点数。此页给出了精度( e^-16之前的位数在机器表示中是正确的)。对于32位,该值为24。我在计算器上找不到多少信息,除了wiki页面,它说它的精度是14。超过一半的浮动小于浮动,在IEEE标准中没有定义.

那边的sqrt是个讨厌的函数。计算其值需要大量的计算。许多步骤意味着大量的算术误差,精度越低,得到的真值越远。这也取决于在sqrt函数中选择的精确算法。您可以检查math.sqrt(4^2)是否返回它应该返回的内容,以及math.sqrt(4^2))/(2*4)是否返回其中的一半。

在计算中与数值误差作斗争本身就是一个完整的学科,根据你所处理的等式,食谱也不同。有考虑二次方程的这个职位

或者,在你的情况下,你会更快乐,因为在最后答案的小数点之后丢弃了所有的数,但只有很少的数。

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

https://stackoverflow.com/questions/50310056

复制
相关文章

相似问题

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