问题标签 [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.

0 投票
1 回答
2107 浏览

c++ - 浮点数的精确值作为有理数

我正在寻找一种将浮点数的精确值转换为两个整数的有理商的方法,即a / bb大于指定的最大分母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 中的一种算法,它基于连分数,但它的来源提到它“还不够完整”。一些基本测试给出了很好的结果,但我无法确认它的整体正确性,我认为它很容易溢出。

0 投票
2 回答
1037 浏览

python - 常数 e 的连分数

我对python很陌生。我最近才开始做计算机科学。e然而,在我输入一个数字后,我如何获得常数的连分数的值。请不要为我解决它,而是教我如何去做。我不确定我应该使用 while 循环还是 for 循环,即使我这样做了,我也不知道该怎么做。

这是完整的语句,

这就是问题。

0 投票
1 回答
89 浏览

c++ - 我正在尝试计算这个连分数,但我似乎无法工作,但程序可以正确编译,但在工作时崩溃

我试图让这个程序正常工作,因为它需要计算链表中输入的连分数。该程序没有显示任何错误,但它总是在中间崩溃。有人能帮我吗?

任务只是将程序存储在链表上,然后通过从链接中获取参数来计算它。它是一个连分数。

0 投票
0 回答
40 浏览

rcpp - Rcpp:连分数和精度

我正在为浮点数Rcpp以及如何从数字向量中的连分数中获取数字输出而苦苦挣扎。

这是我的演示代码:

我的演示代码的输出:

我想知道为什么1/3转换为 0 以及如何从中0.3333333获取1/3?在1/3R 环境下工作正常。

谢谢,感谢您提前回复!

0 投票
1 回答
232 浏览

matlab - 在 Matlab 中使用递归逼近 pi

我应该通过在 Matlab 中使用递归的链接中使用下面的连分数来近似 pi。我是递归的新手,不确定如何让分数不断重复。

http://www.geom.uiuc.edu/~huberty/math5337/groupe/expresspi.html

这是我迄今为止尝试过的,但在正确答案附近还没有找到。

请帮忙!

0 投票
1 回答
221 浏览

precision - 使用连分数计算平方根,精度为 n 位

这是我过去的任意精度有理数 C++ 分配中的一个未解决的问题。

为了计算,我使用了 Wikipedia 中的这个表达式a是初始猜测,r是余数):

平方根的连分数

我最终通过实验猜测,采用了这种方法:

  1. 在分子/分母上使用整数平方根函数,将其用作猜测
  2. 迭代连分数直到分母的二进制长度至少是目标精度

这足以让我通过官方测试,但是,从我的测试来看,精度太高(有时几乎翻倍)——即代码效率低下——而且我没有证据证明它在任何输入上都有效(因此没有信心在代码中)。

代码的简化摘录(natural/rational存储任意长度的数字,假设所有操作都以最简单的形式返回分数):

可以做得更好吗?如果是这样,怎么做?

0 投票
3 回答
378 浏览

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 :) 另请参阅下面我已接受作为答案的评论,您需要更改并添加一些功能:)

0 投票
1 回答
63 浏览

scheme - 方案,连续分数,尾递归

作为一个计划新手,我正在尝试解决一些基本问题。
其中之一是连分数,我喜欢通过递归和尾递归两种方式来实现。
我的递归解决方案(d 和 n 是函数,k 是递归深度):

正在像我想要的那样工作,但我不知道如何递归地制作这个尾巴。
我不承认,我必须以哪种方式积累哪种表情。

0 投票
1 回答
68 浏览

c++ - 我的程序出现分段错误错误,但不清楚如何

根据我对分段错误的理解,它们发生在您尝试访问程序“空间”之外的内存时。我的 IDE 说异常发生在for我执行以下操作的第一个循环中:pi = w + i * i;我不明白我如何访问我不应该访问的内存。该程序应该计算 pi,直到给定数量的数字,它还没有完成。发生错误时,我正在测试到目前为止的内容。代码如下: