- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们有以下代码:
base = vpa(1);
height = vpa(2.2);
mod(2*base + height + height, 2 * (base + height))
这将产生 6.4 的输出。我希望结果为 0,数值解确实给出 0。但我需要使用符号值
vpa()
.
simplify(2*base + height + height < 6.4)
simplify(2 * (base + height) == 6.4)
都给
TRUE
.所以相同的(数字)表达式更小,等于 6.4。
最佳答案
问题是vpa
提供任意大的精度,但 不准确 .首先,请注意 vpa
第二个输入使用 digits
精度位数,即 32
默认情况下。当你做
height = vpa(2.2)
这与
height = vpa(2.2, 32)
假设
digits
是
32
.所以
height
将有
32
精度的数字,但不会精确。要看到这一点,请评估定义的
height
更精确:
>> vpa(height, 32)
ans =
2.2
>> vpa(height, 40)
ans =
2.2
>> vpa(height, 50)
ans =
2.2000000000000000000000000000000000000001469367939
这种不准确导致了
2*base + height + height
之间的数值差异。和
2 * (base + height)
,这两者实际上都不等于
6.4
:
>> base = vpa(1);
>> height = vpa(2.2);
>> vpa(2*base + height + height, 50)
ans =
6.3999999999999999999999999999999999999988245056492
>> vpa(2 * (base + height), 50)
ans =
6.4000000000000000000000000000000000000002938735877
结果,即使
mod(2*base + height + height, 2 * (base + height))
好像是
0
>> mod(2*base + height + height, 2 * (base + height))
ans =
6.4
but it's _not_:
>> vpa(mod(2*base + height + height, 2 * (base + height)), 50)
ans =
6.3999999999999999999999999999999999999988245056492
注意与
6.4
的偏差后一个结果不等于上述两个小偏差的总和;相反,它等于第一个。不保证数值不准确是可加性的。
vpa
减少但不能完全避免数值精度误差 .
vpa
的位数会怎样? ?这会提供更高的精度并可能解决问题吗?
>> base = vpa(1, 1000);
>> height = vpa(2.2, 1000);
奇怪的是,尽管使用了更多的数字,我们还是得到了和以前一样的不准确:
>> vpa(2*base + height + height, 50)
ans =
6.3999999999999999999999999999999999999988245056492
>> vpa(2 * (base + height), 50)
ans =
6.4000000000000000000000000000000000000002938735877
>> vpa(mod(2*base + height + height, 2 * (base + height)), 50)
ans =
6.3999999999999999999999999999999999999988245056492
vpa
来自
符号变量 , 分别是
精确 :
>> base = sym(1)
base =
1
>> height = sym(2.2)
height =
11/5
关于如何定义符号变量的题外话是有序的。请注意
sym(2.2)
有它首先定义的潜在问题
2.2
作为
double
浮点数,其固有的不准确性,然后将其转换为
sym
.在这种情况下,这不是问题,因为
2.2
的浮点数值表示恰好是准确的。事实上,我们可以检查 Matlab 是否显示
height = sym(2.2)
,这是准确的。此外,即使
double
表示不准确,Matlab 会尝试猜测您的意图,并且通常会成功:
>> sym(3.141592653589793)
ans =
pi
(Matlab 假设我们指的是数字 pi)...但并非总是如此:
>> sym(sqrt(777))
ans =
777^(1/2)
>> sym(sqrt(777777))
ans =
7757421003204227/8796093022208
(
sqrt(777)
给出
double
结果
27.874719729532707
,它被
sym
识别为
777
的平方根的近似值。另一方面,
sqrt(777777)
给出了 |114| 不识别的 7由
8.819166627295348e+02
作为
sym
的平方根的近似值)。
>> sym(7777)
ans =
7777
>> sym(7777777777777777777)
ans =
7777777777777777664
(
777777
完全表示为
7777
,但
double
不是,因为它超过了
7777777777777777777
。)
>> height = sym('22/10')
height =
11/5
现在,与
2^53
和
base
正确定义为符号变量,我们得到预期的结果:
>> mod(2*base + height + height, 2 * (base + height))
ans =
0
>> vpa(mod(2*base + height + height, 2 * (base + height)), 1000)
ans =
0.0
关于MATLAB 使用 vpa() 时 mod() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62788258/
如何在 Mod Security 中获取响应/请求正文的大小? 我不断收到此错误,例如: [Mon Sep 17 23:34:38 2012] [error] [client 192.168.1.1]
我要计算的值 对于给定的 N 值,F(N) = (F(N-1) * [((N-R+1)^(N-R+1))/(R^R)]) mod M, R 和 M. 这里 A^B 显示 A 的幂 B 而不是任何位操作
这个程序中的ans = (ans + mod) % mod语句需要什么? 假设 mod = 10^9+7。此函数在 O(log(n)) 复杂度的模运算下计算 a 的 b 次方: long long p
我正在尝试做简单的思考。在循环中使用 ng-include 将多个 html 页面包含到渲染页面。 $scope.modules = ["mod_nav","mod_feature"
我有一个使用moodle库的项目。由于客户端请求,我不得不将 URL 从moodle.example.com 更改为learn.example.com。 我认为这将是一个简单的更改,但唉,moodle
我正在尝试制作一个 Taskfile.yml 文件来构建 go 应用程序,但我不太明白在 go build main.go 之前需要“GOFLAGS=-mod=mod”命令。 引用:https://d
我正在尝试制作一个 Taskfile.yml 文件来构建 go 应用程序,但我不太明白在 go build main.go 之前需要“GOFLAGS=-mod=mod”命令。 引用:https://d
首先,我想说,我从谷歌尝试了很多方法,但 mod_rewrite 不起作用! 我从 httpd.conf 尝试了我在谷歌上找到的 1000000 种方式,但仍然无法正常工作。 我想从 example.
你好我试图安装 libapache2-mod-fcgid mod 但总是出错。 root@mail:~# sudo apt-get install libapache2-mod-fcgid Readi
我需要在 URL 中使用 + 字符。我将 Apache 与 PHP 结合使用。 ([A-Za-z0-9/_%-@\+]*) 不起作用。 我需要的是www.domain.com/c++/ => inde
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我正在尝试在新的 Ubuntu 14.04 上设置一个 apache2 Web 服务器。我一直按照找到的说明进行操作 here一切都很顺利,直到我到达被告知编辑 mod-security.conf 的
当我运行“go mod tidy”时它会中断,因为我的项目导入的包使用路径“github.com/coreos/bbolt”导入了另一个包,但是当它从该路径获取包时,它的 go.mod 说它的路径是“
这种脚本语言没有 % 或 Mod()。我确实有一个 Fix() 可以去掉数字的小数部分。我只需要积极的结果,所以不要太健壮。 最佳答案 威尔 // mod = a % b c = Fix(a / b)
在我的小项目中,我有一个脚本通过运行静态代码检查来确保正确的代码质量,例如,我使用 errcheck验证我是否处理了代码中的每个错误。 在 dep ,对于这种依赖有一个特殊的部分,称为 require
我使用 sudo apt install golang-go 在我的 ubuntu 中安装了 go 语言. 它已成功安装。当我运行 go version我收到 go version go1.10.4
谁能帮我解决这个问题: RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://www.$1 [R=301,L] 我想
BigIntegerValue.pow(IntegerValue) Java 上的指数是整数,但我有 Biginteger 值。 我曾尝试验证签名 GOST 3410,我得到了这个代码 pow,但它太
所以我才开始使用 Forge。我只是有一个非常简单的示例 mod 用于学习目的。当我使用 gradlew build 导出 mod 时,一切正常,它将 mod 放入 forge 的 build\lib
在玩 jmh 时,我遇到了一件我无法解释的奇怪事情。 @BenchmarkMode(Mode.SingleShotTime) @Measurement(iterations = 10, batchSi
我是一名优秀的程序员,十分优秀!