How to resolve the algorithm Continued fraction/Arithmetic/G(matrix ng, continued fraction n) step by step in the Tcl programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Continued fraction/Arithmetic/G(matrix ng, continued fraction n) step by step in the Tcl programming language

Table of Contents

Problem Statement

This task investigates mathmatical operations that can be performed on a single continued fraction. This requires only a baby version of NG: I may perform perform the following operations: I output a term if the integer parts of

a b

{\displaystyle {\frac {a}{b}}}

and

a

1

b

1

{\displaystyle {\frac {a_{1}}{b_{1}}}}

are equal. Otherwise I input a term from N. If I need a term from N but N has no more terms I inject

{\displaystyle \infty }

. When I input a term t my internal state:

[

a

1

a

b

1

b

]

{\displaystyle {\begin{bmatrix}a_{1}&a\b_{1}&b\end{bmatrix}}}

is transposed thus

[

a +

a

1

∗ t

a

1

b +

b

1

∗ t

b

1

]

{\displaystyle {\begin{bmatrix}a+a_{1}*t&a_{1}\b+b_{1}*t&b_{1}\end{bmatrix}}}

When I output a term t my internal state:

[

a

1

a

b

1

b

]

{\displaystyle {\begin{bmatrix}a_{1}&a\b_{1}&b\end{bmatrix}}}

is transposed thus

[

b

1

b

a

1

b

1

∗ t

a − b ∗ t

]

{\displaystyle {\begin{bmatrix}b_{1}&b\a_{1}-b_{1}t&a-bt\end{bmatrix}}}

When I need a term t but there are no more my internal state:

[

a

1

a

b

1

b

]

{\displaystyle {\begin{bmatrix}a_{1}&a\b_{1}&b\end{bmatrix}}}

is transposed thus

[

a

1

a

1

b

1

b

1

]

{\displaystyle {\begin{bmatrix}a_{1}&a_{1}\b_{1}&b_{1}\end{bmatrix}}}

I am done when b1 and b are zero. Demonstrate your solution by calculating: Using a generator for

2

{\displaystyle {\sqrt {2}}}

(e.g., from Continued fraction) calculate

1

2

{\displaystyle {\frac {1}{\sqrt {2}}}}

. You are now at the starting line for using Continued Fractions to implement Arithmetic-geometric mean without ulps and epsilons. The first step in implementing Arithmetic-geometric mean is to calculate

1 +

1

2

2

{\displaystyle {\frac {1+{\frac {1}{\sqrt {2}}}}{2}}}

do this now to cross the starting line and begin the race.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Continued fraction/Arithmetic/G(matrix ng, continued fraction n) step by step in the Tcl programming language

Source code in the tcl programming language

# The single-operand version of the NG operator, using our little generator framework
oo::class create NG1 {
    superclass Generator

    variable a1 a b1 b cf
    constructor args {
	next
	lassign $args a1 a b1 b
    }
    method Ingress n {
	lassign [list [expr {$a + $a1*$n}] $a1 [expr {$b + $b1*$n}] $b1] \
	    a1 a b1 b
    }
    method NeedTerm? {} {
	expr {$b1 == 0 || $b == 0 || $a/$b != $a1/$b1}
    }
    method Egress {} {
	set n [expr {$a/$b}]
	lassign [list $b1 $b [expr {$a1 - $b1*$n}] [expr {$a - $b*$n}]] \
	    a1 a b1 b
	return $n
    }
    method EgressDone {} {
	if {[my NeedTerm?]} {
	    set a $a1
	    set b $b1
	}
	tailcall my Egress
    }
    method Done? {} {
	expr {$b1 == 0 && $b == 0}
    }

    method operand {N} {
	set cf $N
	return [self]
    }
    method Produce {} {
	while 1 {
	    set n [$cf]
	    if {![my NeedTerm?]} {
		yield [my Egress]
	    }
	    my Ingress $n
	}
	while {![my Done?]} {
	    yield [my EgressDone]
	}
    }
}


# The square root of 2 as a continued fraction in the framework
oo::class create Root2 {
    superclass Generator
    method apply {} {
	yield 1
	while {[self] ne ""} {
	    yield 2
	}
    }
}

set op [[NG1 new 2 1 0 2] operand [R2CF new 13/11]]
printcf "\[1;5,2\] + 1/2" $op

set op [[NG1 new 7 0 0 22] operand [R2CF new 22/7]]
printcf "\[3;7\] * 7/22" $op

set op [[NG1 new 2 1 0 2] operand [R2CF new 22/7]]
printcf "\[3;7\] + 1/2" $op

set op [[NG1 new 1 0 0 4] operand [R2CF new 22/7]]
printcf "\[3;7\] / 4" $op

set op [[NG1 new 0 1 1 0] operand [Root2 new]]
printcf "1/\u221a2" $op 20

set op [[NG1 new 1 1 0 2] operand [Root2 new]]
printcf "(1+\u221a2)/2" $op 20
printcf "approx val" [R2CF new 24142136 20000000]


  

You may also check:How to resolve the algorithm Enumerations step by step in the PowerShell programming language
You may also check:How to resolve the algorithm Temperature conversion step by step in the BASIC programming language
You may also check:How to resolve the algorithm ABC problem step by step in the Oforth programming language
You may also check:How to resolve the algorithm Hello world/Standard error step by step in the Agena programming language
You may also check:How to resolve the algorithm Pentagram step by step in the Haskell programming language