This page is under development. Comments are welcome, but please load any comments in the comments section at the bottom of the page. Please include your wiki MONIKER in your comment with the same courtesy that I will give you. Its very hard to reply intelligibly without some background of the correspondent. Thanks,gold
gold Here is some eTCL starter code for ancient Egyptian double false position algorithm in calculator shell.
For purpose of historical discussion, the single and double false position methods will be lumped together, since the early authors and texts do not separate the terms or have some ambiguity. The rule of single false position is implied in the Ahmes Papyrus, 1650 BCE. On some Babylonian tablets like YBC4652 from 1500 BCE, there are corrected or rescaled false positions for the weight riddle problems. In some double position problems, negative numbers crop up. The Sunzi work in China cites the method of excess and deficit, circa 400 CE. The Chinese report some problems as double excess or double deficit, so there may have been differences the way some false position problems were set up, ref. Nine Chapters Mathematics (in extant copy circa 250 AD). Qusta ibn-Luqa of Baghdad (860 CE) discussed the double false position method in his work. In 1202 CE, Fibonacci wrote the Liber Abaci with some DFP problems. Clavius published some DFP discussion in the Epitome Arithmeticae Practicae in 1583 CE. At least in Europe, the methods of double false position include early records and notation of negative numbers.
In the eTCL calculator, two false positions are supplied as guesses as false_position_1 <int <* $side_length >/ 4. 5. >>> and false_position_2 <int <* $side_length >/ 3. 5. >>> . Using the calculation methods, the two false positions produce numbers that fall short or long of the correct answer and the respective differences and errors are used to compute the final solution. A modern algebraic expression for double false position is (e2*f1-e1*f2)/(e2-e1), with the errors as e and the false positions as f. Some aspects of the double false position algorithm are similar to proportions and rule of three, as noted by many authors. The result is provided as </ $difference_cross_products $difference_error >. Note that brackets are set as <&> to avoid triggering wiki linkage.
# using pseudocode # possible problem instances, initialize algorithm_result = 1. set false1 [expr guess * 3/5] set false1 [expr guess * 4/5] calculate f(false1) and f(false2) error1 = product -f1 error2 = product -f2 [expr (e2*f1-e1*f2)/(e2-e1)] check algorithm f(solution) =? initial product check_sum = a+b+c+d+e = original real estate set answers and printout with resulting values pseudocode: need test cases > small,medium, giant pseudocode: need testcases within range of expected operation. pseudocode: are there any cases too small or large to be solved?
In planning any software, it is advisable to gather a number of testcases to check the results of the program. The math for the testcases can be checked by pasting statements in the TCL console. Aside from the TCL calculator display, when one presses the report button on the calculator, one will have console show access to the capacity functions (subroutines).
table 1 | printed in | tcl wiki format |
---|---|---|
quantity | value | comment, if any |
1: | testcase_number | |
4.0 : | factor | |
12.0 : | side length | |
28.0 : | product | |
9 : | answers: false position 1 | |
7 : | false position 2 | |
8.0 : | difference_error | |
80.0 : | difference_cross_products | |
10.0 : | solution result |
table 2 | printed in | tcl wiki format |
---|---|---|
quantity | value | comment, if any |
2: | testcase_number | |
5.0 : | factor | |
10.0 : | side length | |
30.0 : | product | |
8 : | answers: false position 1 | |
6 : | false position 2 | |
10.0 : | difference_error | |
80.0 : | difference_cross_products | |
8.0 : | solution result |
3: | testcase_number | |
6.0 : | factor | |
12.0 : | side length | |
36.0 : | product | |
9 : | answers: false position 1 | |
7 : | false position 2 | |
12.0 : | difference_error | |
96.0 : | difference_cross_products | |
8.0 : | solution result |
# pretty print from autoindent and ased editor # Ancient Egyptian Double False Position Algorithm Calculator # written on Windows XP on eTCL # working under TCL version 8.5.6 and eTCL 1.0.1 # gold on TCL WIKI, 15feb2017 package require Tk package require math::numtheory namespace path {::tcl::mathop ::tcl::mathfunc math::numtheory } set tcl_precision 17 frame .frame -relief flat -bg aquamarine4 pack .frame -side top -fill y -anchor center set names {{} {factor :} } lappend names {side length :} lappend names {product: } lappend names {answers: false position 1: } lappend names {false position 2:} lappend names {difference_error : } lappend names {difference_cross_products : } lappend names {solution result:} foreach i {1 2 3 4 5 6 7 8} { label .frame.label$i -text [lindex $names $i] -anchor e entry .frame.entry$i -width 35 -textvariable side$i grid .frame.label$i .frame.entry$i -sticky ew -pady 2 -padx 1 } proc about {} { set msg "Calculator for Ancient Egyptian Double False Position Algorithm from TCL WIKI, written on eTCL " tk_messageBox -title "About" -message $msg } proc calculate { } { global answer2 global side1 side2 side3 side4 side5 global side6 side7 side8 global testcase_number incr testcase_number set side1 [* $side1 1. ] set side2 [* $side2 1. ] set side3 [* $side3 1. ] set side4 [* $side4 1. ] set side5 [* $side5 1. ] set side6 [* $side6 1. ] set side7 [* $side7 1. ] set side8 [* $side8 1. ] set factor $side1 set side_length $side2 set product $side3 # initialize false positions set false_position_1 9. set false_position_2 10. # reset false positions set false_position_1 [int [* $side_length [/ 4. 5. ]]] set false_position_2 [int [* $side_length [/ 3. 5. ]]] set false_result_1 [- [* $false_position_1 $factor ] $side_length] set false_result_2 [- [* $false_position_2 $factor ] $side_length] set error_1 [- $product $false_result_1] set error_2 [- $product $false_result_2] set difference_error [- $error_2 $error_1 ] set difference_cross_products [- [* $false_position_1 $error_2 ] [* $false_position_2 $error_1 ] ] set result [/ $difference_cross_products $difference_error ] set side4 $false_position_1 set side5 $false_position_2 set side6 $difference_error set side7 $difference_cross_products set side8 $result } proc fillup {aa bb cc dd ee ff gg hh} { .frame.entry1 insert 0 "$aa" .frame.entry2 insert 0 "$bb" .frame.entry3 insert 0 "$cc" .frame.entry4 insert 0 "$dd" .frame.entry5 insert 0 "$ee" .frame.entry6 insert 0 "$ff" .frame.entry7 insert 0 "$gg" .frame.entry8 insert 0 "$hh" } proc clearx {} { foreach i {1 2 3 4 5 6 7 8 } { .frame.entry$i delete 0 end } } proc reportx {} { global side1 side2 side3 side4 side5 global side6 side7 side8 global testcase_number console show; puts "%|table $testcase_number|printed in| tcl wiki format|% " puts "&| quantity| value| comment, if any|& " puts "&| $testcase_number:|testcase_number | |&" puts "&| $side1 :|factor| |&" puts "&| $side2 :|side length | |& " puts "&| $side3 :|product | |& " puts "&| $side4 :|answers: false position 1 | |&" puts "&| $side5 :|false position 2 | |&" puts "&| $side6 :|difference_error | |&" puts "&| $side7 :|difference_cross_products | |&" puts "&| $side8 :|solution result| |&" } frame .buttons -bg aquamarine4 ::ttk::button .calculator -text "Solve" -command { calculate } ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 4.0 12. 28.0 9.0 7.0 8.0 80.0 10.0} ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 5.0 10.0 30.0 8.0 6.0 10. 80.0 8.0} ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 6.0 12. 36.0 9.0 7.0 12.0 96.0 8.0 } ::ttk::button .clearallx -text clear -command {clearx } ::ttk::button .about -text about -command {about} ::ttk::button .cons -text report -command { reportx } ::ttk::button .exit -text exit -command {exit} pack .calculator -in .buttons -side top -padx 10 -pady 5 pack .clearallx .cons .about .exit .test4 .test3 .test2 -side bottom -in .buttons grid .frame .buttons -sticky ns -pady {0 10} . configure -background aquamarine4 -highlightcolor brown -relief raised -border 30 wm title . "Ancient Egyptian Double False Position Algorithm Calculator"
For the push buttons, the recommended procedure is push testcase and fill frame, change first three entries etc, push solve, and then push report. Report allows copy and paste from console.
For testcases in a computer session, the eTCL calculator increments a new testcase number internally, eg. TC(1), TC(2) , TC(3) , TC(N). The testcase number is internal to the calculator and will not be printed until the report button is pushed for the current result numbers. The current result numbers will be cleared on the next solve button. The command { calculate; reportx } or { calculate ; reportx; clearx } can be added or changed to report automatically. Another wrinkle would be to print out the current text, delimiters, and numbers in a TCL wiki style table as
puts " %| testcase $testcase_number | value| units |comment |%" puts " &| volume| $volume| cubic meters |based on length $side1 and width $side2 |&"
gold This page is copyrighted under the TCL/TK license terms, this license .
Please place any comments here, Thanks.
Category Numerical Analysis | Category Toys | Category Calculator | Category Mathematics | Category Example | Toys and Games | Category Games | Category Application | Category GUI |