问题标签 [continued-fractions]
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++ - 浮点数的精确值作为有理数
我正在寻找一种将浮点数的精确值转换为两个整数的有理商的方法,即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 中的一种算法,它基于连分数,但它的来源提到它“还不够完整”。一些基本测试给出了很好的结果,但我无法确认它的整体正确性,我认为它很容易溢出。
python - 常数 e 的连分数
我对python很陌生。我最近才开始做计算机科学。e
然而,在我输入一个数字后,我如何获得常数的连分数的值。请不要为我解决它,而是教我如何去做。我不确定我应该使用 while 循环还是 for 循环,即使我这样做了,我也不知道该怎么做。
这是完整的语句,
c++ - 我正在尝试计算这个连分数,但我似乎无法工作,但程序可以正确编译,但在工作时崩溃
我试图让这个程序正常工作,因为它需要计算链表中输入的连分数。该程序没有显示任何错误,但它总是在中间崩溃。有人能帮我吗?
任务只是将程序存储在链表上,然后通过从链接中获取参数来计算它。它是一个连分数。
rcpp - Rcpp:连分数和精度
我正在为浮点数Rcpp
以及如何从数字向量中的连分数中获取数字输出而苦苦挣扎。
这是我的演示代码:
我的演示代码的输出:
我想知道为什么1/3
转换为 0 以及如何从中0.3333333
获取1/3
?在1/3
R 环境下工作正常。
谢谢,感谢您提前回复!
matlab - 在 Matlab 中使用递归逼近 pi
我应该通过在 Matlab 中使用递归的链接中使用下面的连分数来近似 pi。我是递归的新手,不确定如何让分数不断重复。
http://www.geom.uiuc.edu/~huberty/math5337/groupe/expresspi.html
这是我迄今为止尝试过的,但在正确答案附近还没有找到。
请帮忙!
precision - 使用连分数计算平方根,精度为 n 位
这是我过去的任意精度有理数 C++ 分配中的一个未解决的问题。
为了计算,我使用了 Wikipedia 中的这个表达式(a是初始猜测,r是余数):
我最终通过实验猜测,采用了这种方法:
- 在分子/分母上使用整数平方根函数,将其用作猜测
- 迭代连分数直到分母的二进制长度至少是目标精度
这足以让我通过官方测试,但是,从我的测试来看,精度太高(有时几乎翻倍)——即代码效率低下——而且我没有证据证明它在任何输入上都有效(因此没有信心在代码中)。
代码的简化摘录(natural
/rational
存储任意长度的数字,假设所有操作都以最简单的形式返回分数):
可以做得更好吗?如果是这样,怎么做?
f# - 是否可以计算 f# 中负数的连分数?
我正在尝试制作一个可以计算实数的计算分数的程序。它完全可以正常工作,除非我尝试对负实数执行此操作,例如“-71/23”或小数“-3,086 ...”。
如果我计算 +71/23 的连分数,我得到 [3; 11; 2]。这是对的。据我了解,如果我尝试为 -71/23 执行此操作,我应该得到相同的 int 列表,但第一个元素是负数(通过笔和纸工作)。所以应该是 [-3; 11; 2]。但它不工作。我得到 [-3; -11;-1; -1],即每个负数加上一个额外的负数。
我认为我需要创建一个分支,告诉函数只允许 int 列表的第一个数字为负数 - 其余的应该返回正数。我尝试了不同的东西,但我不确定如何解决。
顺便说一句,这是家庭作业。
在此先感谢,斑马板
printfn "%A" (float2cfrac (-71.0/23.0))
编辑:使用注释移动代码并更改代码格式。
编辑:经过大量工作,我现在找到了解决方案:D 只需添加一个额外的行,说明如果 x 为负,则 -q 而不是 q :) 另请参阅下面我已接受作为答案的评论,您需要更改并添加一些功能:)
scheme - 方案,连续分数,尾递归
作为一个计划新手,我正在尝试解决一些基本问题。
其中之一是连分数,我喜欢通过递归和尾递归两种方式来实现。
我的递归解决方案(d 和 n 是函数,k 是递归深度):
正在像我想要的那样工作,但我不知道如何递归地制作这个尾巴。
我不承认,我必须以哪种方式积累哪种表情。
c++ - 我的程序出现分段错误错误,但不清楚如何
根据我对分段错误的理解,它们发生在您尝试访问程序“空间”之外的内存时。我的 IDE 说异常发生在for
我执行以下操作的第一个循环中:pi = w + i * i;
我不明白我如何访问我不应该访问的内存。该程序应该计算 pi,直到给定数量的数字,它还没有完成。发生错误时,我正在测试到目前为止的内容。代码如下: