precision - 最大值因非常简单的相等而失败(相等)
问题描述
我有一个非常简单的数值比较,最大值失败了。我打开了详细模式和调试模式,但看不到任何额外的细节。有什么我需要指定的吗(我为 fpprec 尝试了不同的值,但没有用)。
(%i2) is(equal(18225979/30454181, 0.5984721441039565));
(%o2) false
只要参数在小数点后最多等于 12 位,我希望最大值返回 true。提前感谢您的解决方案和建议。-布雷迪
解决方案
我认为您想要的是诸如is(abs(x - y)/abs(y) < 1e-12)
在哪里x
以及y
有问题的数字之类的东西。
is(equal(x, y))
实现为is(ratsimp(x - y) = 0)
. 这与对多个数字的简单测试有着微妙的不同。我的建议是测试上面建议的绝对相对差异。
推荐阅读
- karate - 如何从项目 jar 运行空手道测试?
- sql-server - SSIS“执行报告”错误-“报告无效”-在 SSMS 中间歇性出现-原因?
- amp-html - 是否可以在不包含 v0.js 脚本的情况下创建 AMP 页面?
- c# - 转义while循环,while条件为假
- css - Django 中的 CSS 未注册到控制台
- powershell - 匹配号码长度和前缀
- r - 不应该与具有家庭链接功能 gaussian(log) 的 glm 与具有 log(outcome) ~ ... 的 lm 相同?
- c# - 使用带有偏移的 Raycast 命中点移动对象
- racket - Racket 中用于创建新语言的特殊功能的作用
- python - 为什么单个模块导入会使 pytest 运行增加 1.5 秒?