65.9K
CodeProject 正在变化。 阅读更多。
Home

非正规到简单连分数的转换器和计算器

2024年7月8日

MIT

3分钟阅读

viewsIcon

8254

downloadIcon

168

广义连分数被转换为简单连分数 (SCF),并且可以进行基本运算 (-, +, *, /)。

引言

广义连分数被转换为简单连分数 (SCF) 并且 
可以进行基本运算 (-, +, *, /)。

因此,可以运算 (-, +, *, /) SCF,而且,如果允许的话,还可以运算“简单有理连分数” (SRCF)。 SRCF 将具有所有等于 1 的分子,但各项可以是像图像中那样的有理数
 

背景

CF 类执行四个基本运算 (-, +, *, /),其中操作数可以是 SCF 或 SRCF。
Transform_GCF_2_SRCF 类将 GCF 转换为 SCF 或 SRCF,以便稍后进行运算。 

使用代码

可以采用五种方式进行实例化,具体取决于参数
- 分子和分母
- 一个 Rational
- 一个 double
- 一个 List(Of Rational) 对象
- 一个 List(Of Rational) 对象以及项周期开始的项索引。 没有 
 周期性通过传递 index = -1 来指示。 如果存在周期性,则会添加一些额外的项。 
添加。

传递一个 Double,它会被转换为分子,分母等于 1。 如果 double 不是整数,则将其(以及分母)乘以 10,直到它成为整数。


要运算,只需像使用数字一样进行数学运算

        Dim operandA = New CF(1.5)
        Dim operandB = New CF(0.5)
        Dim result = operandA + operandB
        Trace.WriteLine(result.ToString()) 
        ' will show [1; 1] = 2/1 = 2  (the CF = num./denom. = ToDouble())

        Dim A() As Rational = {New Rational(2.0), New Rational(2.0, 3.0)}
        Dim B() As Rational = {New Rational(-1.0), Rational.ParseFraction("-2 / 3")}
        Dim lstA As New List(Of Rational)
        lstA.AddRange(A)
        Dim lstB As New List(Of Rational)
        lstB.AddRange(B)
        Dim opA As New CF(lstA)
        Dim opB As New CF(lstB)
        result = opA + opB
        Trace.WriteLine(result.ToString()) ' will show [1] = 1/1 = 1


限制

计算器可以运算小的或大的 Double 值,例如 1e-100 减去 1e+100,但 ToDouble() 方法当然会受到 Double 最大值和最小值的限制。
方法 ToNumDen() 则不然,它返回一个在分子和分母中都具有 BigIntegers 的 Rational。

结论和关注点

我发现 π 的 CF 非常有趣

转换为 SRCF 似乎也遵循一种模式

 

历史

版本 1.0.3.0 (2024/07/09)

进行了一些修复。

转换 CF 窗口的一个新功能允许包含公式。 以这种方式,例如

                4,(k*2-1)^2 will generate terms
                4,(1*2-1)^2,(2*2-1)^2,...
                
                2,1 will generate terms
                2,1,1,...
                the last term -if Not otherwise indicated- will repeat 
                as many times as we later indicate
                

版本 1.0.4.0 (2024/07/10)

- 进行了一些改进,尤其是在公式代码中。
- BigIntegers 现在显示其所有数字。

版本 1.0.5.0 (2024/07/11)

- 修复了导致堆栈溢出的递归错误。
- 更新了 Math10 的 Rational 类,因此分数输出显示为分数而不是小数。

版本 1.0.6.0 (2024/07/12)

进行了一些修复,包括 CF 类有时会生成单个项。

版本 1.0.7.0 (2024/07/21)

在加法和减法的特殊情况下,结果有两项,进行了一个修复。 例如,1/3+1/6。

版本 1.0.8.0 (2024/07/24)

在乘法和除法的某些特殊情况下,较短的操作数小于三个项,进行了一个修复。 

显示周期连分数已得到改进。

版本 1.0.9.0 (2024/07/27)

仍然,在显示周期连分数时存在一个错误。

参考文献

[1]. Mugassabi, S. I., & Mistiri, F. (2015). “连分数的基本算术运算符”。 
[2]. Mugassabi, S. I., & Amsheri, S., M. (2019). “简单连分数的乘法和除法”。
[3]. https://r-knott.surrey.ac.uk/Fibonacci/cfINTRO.html#section11.1
[4]. https://en.wikipedia.org/wiki/Generalized_continued_fraction
[5]. https://poset.jp/posts/continued-fractions-attempt-1/continued-fractions-part-2/
[6]. 一个非凡的 π 连分数 - Mathematics Stack Exchange

 

 

© . All rights reserved.