问题标签 [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.
c++ - 如何使用 C++ 中的类编写有理分数
我必须实现Rational
类才能获得有理分数。该header.h
文件由我的导师提供,因此我必须跟进。我还必须在函数中编写复制构造Rational::Rational(const Rational& cRational)
函数,以便object
可以复制。我已经编写了我的代码,但是在输出中添加分数是错误的。有人可以帮我解决这个问题吗?我的编码有什么问题,Rational::addition(const Rational &a)
或者我该如何解决?
输出 :
主功能:
头文件:
我的程序:
octave - GNU/Octave 中的有理数比较与数值精度无关
Octave 解释器将此表达式计算为假:
原因
这可以通过rat
(or rats
) 函数或强制转换值来避免,但生成的表达式缺少初始表达式的清晰格式:
当使用 Octave 教孩子算术时,数学表达式的“脏”翻译是没有用的。
是否可以进行任何全局调整来评估为true
原始表达式?
c++ - 浮点数的精确值作为有理数
我正在寻找一种将浮点数的精确值转换为两个整数的有理商的方法,即a / b
不b
大于指定的最大分母b_max
。如果满足条件b <= b_max
是不可能的,那么结果会退回到仍然满足条件的最佳近似值。
坚持,稍等。这里有很多关于截断实数的最佳有理逼近的问题/答案,该实数表示为浮点数。但是我对浮点数的确切值感兴趣,它本身就是一个具有不同表示的有理数。更具体地说,浮点数的数学集合是有理数的子集。在 IEEE 754 二进制浮点标准的情况下,它是二元有理数的子集。无论如何,任何浮点数都可以转换为两个有限精度整数的有理商,如.a / b
因此,例如假设 IEEE 754 单精度二进制浮点格式,有理等价的float f = 1.0f / 3.0f
不是1 / 3
,而是11184811 / 33554432
。这是 的精确值f
,它是来自 IEEE 754 单精度二进制浮点数的数学集合中的一个数字。
根据我的经验,遍历(通过二进制搜索)Stern-Brocot 树在这里没有用,因为当浮点数被解释为截断实数而不是精确值时,它更适合近似浮点数的值理性。
可能,连分数是要走的路。
这里的另一个问题是整数溢出。想想我们想要将有理数表示为两个的商int32_t
,其中最大分母b_max = INT32_MAX
。我们不能依赖像b > b_max
. 所以算法一定不能溢出,或者它必须检测溢出。
到目前为止,我发现的是Rosetta Code 中的一种算法,它基于连分数,但它的来源提到它“还不够完整”。一些基本测试给出了很好的结果,但我无法确认它的整体正确性,我认为它很容易溢出。
sympy - 使用 Sympy 对某个数域上的单变量多项式进行因式分解
我正在使用 Sympy 在一些扩展字段上分解多元多项式。
如果我可以将单变量多项式分解为实数,我想我会有一个工作代码。对于我的代码,这使我不得不在“QQ”上分解单变量多项式,如果需要,在某个数字字段上分解。
我现在的方法是在“QQ”上定义这些单变量多项式,然后查看根并确定每个根是否为真。如果它是真实的,我会在“QQ”中添加所需的术语,然后让 Sympy 考虑因素。这意味着我尝试自动化以下步骤:
- f=Poly((x^2-3)*(x^2-5),x,domain='QQ')
- 解决(f,x)
- (给出 [-sqrt(3),sqrt(3),-sqrt(5),sqrt(5)])
- f.factor(f,extension=[sqrt(3),sqrt(5)])
(..或其他方式,但我认为具有类似的步骤和运行时间)
这当然有很长的运行时间,因为您需要两次计算因子。还有很多我需要考虑的例外情况。
长话短说:有没有办法让 Sympy 将多项式分解为 'QQ' 并允许它在需要时进行一些扩展?
有没有像 f.factor(numberfield=True) 这样的东西?
先感谢您!!
python - 在 Python 中解决有理数线性规划问题
我有一个带有整数约束的 LP,我想使用 Python 以精确的算术求解。其实我只需要一个可行的点。
编辑:这里的“精确算术”是指无界枚举数和分母的有理数。
以前的尝试:
- 找到线性程序提到 qsoptex 的确切解决方案,但是当我尝试导入它时,我得到了
ImportError: libqsopt_ex.so.2: cannot open shared object file: No such file or directory
,尽管据我所知,我给出了该库的路径。 - SoPlex 在控制台上工作,但我找不到 Python 接口。
- PySCIPOpt ( https://github.com/SCIP-Interfaces/PySCIPOpt ) 是 SCIP 的 Python 接口,包括 SoPlex,但我不知道如何调用特定的求解器(带有特定选项)。
- cdd(https://pycddlib.readthedocs.io/en/latest/linprog.html)做了一些事情,称之为LP,但我不知道他们实际解决了哪个问题。
速度只是一个中等问题。我的较大实例有大约 500 个带有框约束和 40 个等式的变量,但所涉及的数字可能很大。
python - 如何将有理数或无理数输入 argparse?
如何使用 argparse 通过终端将 3/2 等有理数输入到我的 python 脚本中?当我想使用 argparse 输入 pi 或任何其他无理数(如 sqrt(2))时,我遇到了同样的问题。
问候,哈迪
coq - 如何使 Coq 中的代数操作更容易?
我正在尝试使用 Coq 的整数和有理数标准库。到目前为止,我的证明非常耗时,而且看起来很糟糕。我想我错过了一些重要的证明技术。如此简单的引理不应该这么长时间来证明。有什么提示吗?
这是一个例子:
algorithm - 带误差控制的有理指数根的有理逼近
我正在寻找一种算法,可以有效地计算b^e
哪里b
和e
是有理数,确保近似误差不会超过给定err
(也是有理数)。明确地说,我正在寻找一个功能:
这将维护法律|exp(b, e, err) - b^e| < err
有理数表示为成对的大整数。让我们假设已经定义了所有保持理性的操作,如加法、乘法等。
我找到了几种方法,但它们并没有让我足够清楚地控制错误。在这个问题中,我不关心整数溢出。实现这一目标的最佳方法是什么?
exp - Pari/GP 中的二进制拆分
在尝试在没有 FPU 的情况下实现正弦函数时,我意识到所有输入都已经是理性的,因此我决定尝试一种全理性的方法。可能更慢但是:为什么不呢?该系列是线性收敛的,因此有机会通过二进制拆分进行运行时优化。甚至还有关于如何做到这一点以及我使用的非常详细的文献。
到目前为止,一切都很好。
我的数值算法原型工具是 Pari/GP,所以我将上面提到的论文中的代码移植到了 Pari/GP 中,正如您可能已经从我在这里发布问题的事实中猜到的那样,它不起作用。好吧,它确实有效,但无法将错误最小化。该论文还有其他几种不同功能的配方,但都表现出相同的行为。假设论文中有错字,我检查了作者在CLN中的实现。高度优化,但基于论文中的代码,甚至是逐字记录。
为了获得 MWE,我使用了他们的配方exp(p/q)
(除了阶乘之外最简单的配方)并简化了 Pari/GP 代码。
(最后一个可能需要更长的时间,如果你想运行它可以跳过它。)
如您所见,经过几十个步骤后,无法进一步减少错误。
所以这要么是我对算法如何工作或 Pari/GP 如何工作的误解。它是哪一个,为什么?