计算机和计算器上的Lua程序不同
2018-5-12 19:38:13
收藏:0
阅读:81
评论:2
我试图为我的TI-Nspire CX CAS创建一个简单的二次公式程序。 我似乎一切都正确,计算机上可以正常工作:
然而,在计算器上它不起作用。 第二个正确,但第一个是-4.44089...e-16。(不说...,只是因为我不想打整个单词)
代码如下(简化版):
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
为什么计算器上的答案与计算机上不同?如何解决这个问题?
提前感谢!
点赞
用户8866053
正如 Dimitry 指出的那样,我必须要写一个 CAS 引擎。下面是一份 Lua 中的平方根简化代码:
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
希望这可以帮到你!
2018-05-13 14:55:41
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Egor 想要说的是,计算机大部分时间无法计算出精确的答案。
德州仪器主要经营微控制器,所以我不会期望在你的设备中看到通常的 x86-64 处理器。这意味着 TI 可以以自己的方式做很多事情。他们可能对如何处理小值、舍入、如何处理复杂数学运算等做出自己的决策......
现在,计算机使用至少 32 位的浮点数。这个页面给出了精度(机器表示中在
e^-16之前正确的位数)。对于 32 位,该值为24。我在计算器上找不到太多信息,除了 维基页面,它说其精度为14。半精度小于单精度,该 IEEE 标准中没有定义。那里的
sqrt是一个令人讨厌的函数。计算它的值需要相当多的计算。许多步骤意味着许多算术错误,精度越低距离真实值越远。这还取决于在sqrt函数中选择的确切算法。您可以检查math.sqrt(4^2)返回了应该返回的内容,以及math.sqrt(4^2))/(2*4)是否确切地返回了其一半。在计算中战斗数值误差是一门完整的学科,而配方取决于您要解决的方程。有这篇文章研究了二次方程。
或者在您的情况下,您可能会更愉快地只舍弃最终答案小数点后的少数数字。