问题标签 [rational-number]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java如何将0作为分母显示在有理类中
现在,在运行我的 Rational 程序时,我在创建一个分子为 2 分母为 0 的新有理数时得到 1,我的老师希望我用 1 而不是 0 替换分母,但我无法得到每当尝试在 reduce 方法中添加 if 用于将分数简化为最简单的形式时,都会出现堆栈溢出错误。我还尝试在包含分子和分母的有理对象所在的构造函数中添加一个 if 语句,但仍然无济于事。当用 0 分子和 2 在分母中创建有理数时,我也有类似的问题。它应该返回 0/1,但返回的是 0。我相信这两个是相关的,有人知道这里发生了什么吗?
java - java-处理浮点舍入错误,如何保持弧度合理
我已经修改了这个 arcball 类,以便每次调用 arcball.rollforward(PI/180); 将矩阵旋转 1 度。我试图设置它,所以 arcball.rollback() 用累积的浮点 rotatebywithincludedfloaterror 调用,但它与没有浮点错误的回滚 360 度具有相同的度数错误。这是 1000 次完整旋转后偏离的距离,它应该是顶部立方体在 x 上的 1:1 反射
这是具有 1 * 360 度旋转和帧率循环的主要功能,用于测试(将帧率设置为 900 进行多次旋转,这样就不会永远花费)
和轨迹球类
跟踪浮动误差范围以返回相同的度数 arcball.rollforward()
floating-point - 将浮点数转换为保证转换回原始浮点数的有理数
我正在寻找一种将浮点数转换为有理数的算法,以保证有理数返回到原始浮点数,并且分母最小化。
一个简单的算法可以将浮点数的实际值返回为 X / 2 N,但是对于任何不是有限二进制分数的东西来说,2 N往往是相当大的。例如,数字 0.1,当存储在双精度浮点数中时,实际上近似为 ³⁶⁰²⁸⁷⁹⁷⁰¹⁸⁹⁶³⁹⁷⁄₃₆₀₂₈₇₉₇₀₁₈₉₆₃₉₆₈ ) (分母为 2 55 但是,将 0.1 转换为 ¹⁄₁₀ 显然更好,并且 ¹⁄₁₀ 将评估为 ³⁶⁰²⁸⁷⁹⁷⁰¹⁸⁹⁶³⁹⁷⁄₃₆₀₂₈₇₉₇₀₁₈₉₆₃₉₆₈
一个相关的问题是用最少的数字打印十进制浮点数(本文描述了一些技术),这可以被认为是这个问题的一个特殊版本,具有一个额外的约束,即分母必须是 10 的幂。
有一个现有的问题,可能更多,但它们没有转换后的有理数必须评估为原始浮点数的约束。
python - sympy 平方根:对有理数进行运算的最佳方法?
由于我希望简化平方根,因此我遇到了这种解决方法:
但它太慢了,我认为这不是最合适的方法所以有没有其他方法可以使用平方根并简化它们 - 自动 -
ocaml - 为什么 Num 的有理数打印为?
我继续Num
对 Ocaml 库的探索,原因是整个逻辑库都是使用它编写的。
今天,我想做一个有理数的负数。获得-1/2
, 从1/2
.
为此,我认为,给定 ana
类型Ratio.ratio
,我可以通过以下方式计算它的负数(并返回 a ratio
,而不是 a num
):
ratio_of_num (minus_num (num_of_ratio a))
(函数来自:https ://ocaml.org/releases/4.05/htmlman/libref/Num.html#TYPEnum )
现在,我想检查结果,但我总是得到这个解决方案:Ratio.ratio = <abstr>
关键是,现在我意识到当我使用ratio_of_num
. 例如:
我搜索了一下,发现这个问题(OCaml 顶级输出格式)使用了不同的函数(ratio_of_int 2
),但似乎不再可能。也许那ratio
是一个不同的图书馆。
有什么帮助吗?
PS:顺便说一句,为了num
以后更换,我正在尝试安装Zarith
,opam
但不能。
我的问题是我这样做opam install zarith
了,这显示:
所以我这样做了opam install gmp
,我得到:
这让我不知道如何继续尝试。对此也有任何帮助吗?
无论是第一个问题还是第二个问题,我都将不胜感激!
在下面,由于以下对话,我发布了一些已添加到问题中的版本:
编辑(解决添加所需的#require)
我已经完成了@ivg 的建议,但仍然无法正常工作(我做了初始的open Num
,因为它会另外询问):
编辑2(还需要#require)
我也尝试过 Ocaml 而不是 utop,但错误更严重:
编辑 3(在 Ocaml 中工作,而不是 utop)
编辑 4(在 utop 中工作,请注意,当它是整数时,打印会简化结果)
python-3.x - 如何在python中高精度地将浮点数转换为整数比?
问题:
我想以最简单的形式将浮点数转换为整数的比率。(不是这个问题的重复,请参阅下面的“编辑”)。例如,0.1
= 1, 10
,0.66666...
=2, 3
等。在下面的代码片段中,我尝试这样做以x = 0.1, 0.2, ..., 1.0
使用此默认函数;该方法仅适用于x = 0.5
和x = 1.0
。为什么这个算法对于其他值会失败,有x
什么更好的方法来做到这一点?如果它是相关的,我的用例将是dx ~ 0.0005 = x[1] - x[0]
for 0.0005 < x 10.0
。
代码:
输出:
编辑:
这不是真正的重复。原始问题中接受的答案的两种方法都失败了我的 MWE 的一个基本用例。要显示该Fraction
模块给出了相同的错误:
haskell - Haskell的SBV求解器中没有变量的平凡有理问题
我在 Haskell 中使用SBV Solver,特别是我使用 Rational 类型作为变量。
我想解决线性问题,例如:
代码工作没有问题,我的问题是当我想解决类型 5 <= 4 的“琐碎”情况如果它与整数一起工作我没有问题,我可以使用以下代码;
此代码可以正常工作
如果我尝试将等价物与 Rationals 一起使用:
解决方案3不起作用并返回
我可以引入一个虚拟变量。
它也可以,但我想知道是否可以在不引入此变量的情况下完成。
我当然可以不使用 SBV Solver 解决问题,但是在出现此问题的上下文中,我更容易从求解器中解决它
提前感谢,对不起我的英语,我用谷歌翻译来帮助我
comparison - Coq 中有理数的“小于”是否可判定?
在 Coq 标准库中,“小于”关系对于自然数 ( lt_dec
) 和整数 ( Z_lt_dec
) 是可判定的。但是,当我搜索 ( Search ({ _ _ _ } + {~ _ _ _ })
) 时,我找不到有理数的Q_le_dec
or Qle_dec
,只能Qeq_dec
找到可判定的相等性。
这是因为“小于”关系对于 Coq 中的有理数是不可判定的吗?或者它是可决定的,但决策过程没有在标准库中实现?
c++ - 在 C++ 中使用 int 分子和分母对 double 进行有理逼近
真实世界的第三方 API 采用类型fraction
为分子和分母struct
的参数。int
我需要传递的值被我称为转换为双精度的十进制字符串。
可能值的范围是,比如说 10K 到 300M,但如果小数点后有小数部分,则很重要。
我这里有两种近似方法的代码,一种使用扩展欧几里得算法,另一种是蛮力。两种方法都使用int
给定的类型找到有理近似值double
。
蛮力当然是两者中更准确的,并且当转换的数字很大时实际上更快。我的问题是,我能对使用欧几里得算法的近似质量说些什么吗?更正式地说,我可以对使用欧几里得算法的近似值与蛮力算法的近似值(我认为这是最优的)进行限制。
一个界限的例子:
如果最优逼近的误差是r
,那么欧几里得算法逼近会产生一个小于 的误差2*r
。
(我并不是说这是界限,我当然无法证明这一点,这只是一个良好界限的示例)。
这是一个测试程序的代码:
这是一些示例输出: