Sheep and Herd Animal Calculator and eTCL Slot Calculator Demo Example, numerical analysis

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 calculating sheep, cattle, and herd animals from Sumerian texts and excavations. The impetus for these calculations was checking prices in some cuneiform texts and modern replicas. Most of the testcases involve replicas or models, using assumptions and rules of thumb.

Ratios and increases

There are several tablet fragments that were problems or model documents dealing with sheep increase, which have to be compiled together to form a coherent math solution. The gist of the analysis was taking bare numbers from sheep counting and assumptions in base 60 to develop pseudocode or base 10 algorithms for a eTCL calculator. Notation here was convertible to eTCL pseudocode. A tur of adult sheep was 1*60+40 in base 60 or decimal 100, as defined here. The adult sheep and juvenile sheep (called lambs here) are counted separately according to custom. For the two sheep herds on tablet Yale YBC7326, the increase was 80 lambs in the first herd and 70 lambs in the second herd, ref. translations from Mathematical Cuneiform Texts. On the same YBC7326 tablet face with unreadable portions, there are higher numbers as 8*60+20 (decimal 500) and 10*60+50, decimal 650 (if the powers of base 60 are correct). In modern terms, the increase in the first herd was 80 lambs /100 sheep, 80/100, 0.8, converting 80 percent. The increase in the second herd was 70 lambs /100 sheep, 70/100, 0.7, converting 70 percent.

Continuing with the math problems on sheep, there were different or higher numbers which were rescaled from the original herd numbers. In another math problem, tablet YBC8522 had numbers similar to the first herd with the calculation {(1*60+20)/(1*60+40)}*{16*60+40} for {13*60+20}. Converting to decimal, { 80 lambs/100 sheep} * 1000. = 800. <lambs?>. The 800. lambs could be interpreted as an upscaling the herd increase as either the proportional increase in a herd of 1000 sheep or the (somewhat) proportional increase over time of ten years. In some math problems of covering area with material like mud plaster, silver plate, and bitumen, the procedure was to state an initial proportion (ratio) for a small area and apply the same proportion for a larger area. While not overtly stated, the intent may have been to compare the increase of two herds of sheep and rescale or recombine rates for a larger herd.

The model problem includes rules of thumb and modern assumptions. The adult sheep and juvenile sheep are counted separately according to Sumerian custom. The first herd was 100 sheep which showed an increase of 80 lambs over the season. The Sumerians did not use percentages; the percentages are calculated for the modern user. For the first herd, the percentage of lambs was (80/100)*100, 80 percent. The second herd was 10 sheep which showed an increase of 4 lambs over the season. For the second herd, the percentage of lambs was (4/10)*100, 40 percent. Both herds of adult sheep were fattened for a period of 10 days at a rate of 2 barley liters per animal. For the first herd, the total of fattening barley feed was sheep*days*feed_rate, 100*10*2, 2000 liters of barley. The second total of barley was 10*10*2, 200 liters of barley. The silver value for the total lambs in both herds was (lambs1 and lambs2)*silver_price, (80+4)*(1/2), 42 silver pieces. The tax rate in kind was one animal in ten. For the adult sheep, the tax rates were 100*(1/10) and 10*(1/10) animals for the first and second herds, respectively.

For the eTCL calculator, taxes, probable feed rates, and prices for sheep were used from Sumeria, UrIII (2300BCE). From the trial calculations, the prices were transferred correctly to silver pieces (shekles or gin). However, the trade values or price ratios were undoubtedly different in different eras, countries, and texts. The eTCL user can certainly change the prices, feed rates, and taxes in kind on his own program copy, saved from the TCL_WIKI website.

Pseudocode and Equations

  set increase1 {/ $lambs1 $sheep1 }
  set increase2 {/ $lambs2 $sheep2 }
  set percent {* {/ $lambs $sheep } 100.}
  set delta {abs {- $increase2  $increase1}}
  set scaleupx1  {*  {/ $lambs1 $sheep1 } 1000.}}
  set scaleupx2  {*  {/ $lambs2 $sheep2 } 1000.}}
  text substitute { and } to eTCL expressions
  fattening barley feed = sheep*days*feed_rate, 
  set taxinkind1 {* $sheep1 {/ 1. 10. } }
  Sumerian price in silver = [/ liters 300.]
  Sumerian price in liters grain = [* silver 300.] 
  # 1 silver piece = 1 gur = 300 liters of grain
  liters = [* volume_in_cubic_cm .001]
  price? = raw materials + labor  +  profit
  price? = raw materials + heat process
  price? = raw materials + labor 
  average price per unit  = revenue  / units sold

Testcases Section

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).

Testcase 1

table 1printed in tcl wiki format
quantity value comment, if any
testcase number: 1
100.0 :sheep1 100.0
80.0 :lambs1 80.0
100.0 :sheep2100.0
70.0 :lambs2 70.0
15.0 :days time period15.0
80.0 :percent180.0
70.0 :percent2 70.0
3000.0 : liters fattening barley feed 1st flock 3000.0
3000.0 : liters fattening barley feed 2nd flock 3000.0
10.0 :tax1 in kind10.0
10.0 :tax2 in kind 10.0
75.0 :total lambs in silver pieces75.0
800.0 :scale up 1 800.0
700.0 :scale up 2 700.0
10.0 :delta1 in abs 10.0

Testcase 2

table 2printed in tcl wiki format
quantity value comment, if any
testcase number: 2
100.0 :sheep1 100.0
70.0 :lambs1 70.0
100.0 :sheep2100.0
60.0 :lambs2 60.0
30.0 :days time period30.0
70.0 :percent170.0
60.0 :percent2 60.0
6000.0 : liters fattening barley feed 1st flock 6000.0
6000.0 : liters fattening barley feed 2nd flock 6000.0
10.0 :tax1 in kind10.0
10.0 :tax2 in kind 10.0
65.0 :total lambs in silver pieces65.0
700.0 :scale up 1 700.0
600.0 :scale up 2 600.0
10.0 :delta1 in abs 10.0

Testcase 3

table 3printed in tcl wiki format
quantity value comment, if any
testcase number: 3
100.0 :sheep1 100.0
80.0 :lambs1 80.0
100.0 :sheep2100.0
40.0 :lambs2 40.0
60.0 :days time period60.0
80.0 :percent180.0
40.0 :percent2 40.0
12000.0 : liters fattening barley feed 1st flock 12000.0
12000.0 : liters fattening barley feed 2nd flock 12000.0
10.0 :tax1 in kind10.0
10.0 :tax2 in kind 10.0
60.0 :total lambs in silver pieces60.0
800.0 :scale up 1 800.0
400.0 :scale up 2 400.0
40.0 :delta1 in abs 40.0

Screenshots Section

figure 1.

http://s1.postimg.org/7nrwm5lnz/sumerian_bronze_calculator_TCL_WIKI_2.png


References:

  • Late Uruk Pigs and other Herded Animals, Robert K. Englund,1995
  • Late Uruk Period Cattle and Dairy Products, Robert K. Englund,1995
  • Relating Dairy Productivity in the UrIII Period, Robert K. Englund,1995
  • Robert Englund, UCLA [L1 ]
  • Ur III Tablets in the Valdosta State University, search on cdli
  • Cuneiform Digital Library Journal, search on Equivalency Values
  • Ur III Equivalency Values[L2 ]
  • Especially, the Ur III Equivalency Values and library texts for sheep (udu) keyword.
  • The Sumerian keywords search on the cdli
  • are very effective, but major size files to download

Appendix Code

appendix TCL programs and scripts

        # pretty print from autoindent and ased editor
        # Sumerian Sheep and Herd animals calculator
        # written on Windows XP on eTCL
        # working under TCL version 8.5.6 and eTCL 1.0.1
        # gold on TCL WIKI, 7oct2014
        package require Tk
        namespace path {::tcl::mathop ::tcl::mathfunc}
        frame .frame -relief flat -bg aquamarine4
        pack .frame -side top -fill y -anchor center
        set names {{} {sheep1:} }
        lappend names {lambs2:}
        lappend names {sheep2: }
        lappend names {lambs2:}
        lappend names {accounting period days (typical 60 days) :}
        lappend names {percentage 1: }
        lappend names {percentage 2 : }
        lappend names {total lambs in silver :}
        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 Sumerian Sheep and Herd Animals 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
            global scaleupx1 scaleupx2 delta1
            global sheepbarley1 sheepbarley2
            global taxinkind1 taxinkind2
            incr testcase_number
            set side1 [* $side1 1. ]
            set side2 [* $side2 1. ]
            set side3 [* $side3 1. ]
            set side4 [* $side4 1. ]
            set side5 [* $side5 1. ]
            set sheep1 [* $side1 1. ]
            set lambs1 [* $side2 1. ]
            set sheep2 [* $side3 1. ]
            set lambs2 [* $side4 1. ]
            set workdays2 [* $side5 1. ]
            set fraction1 [/ $lambs1 $sheep1 ]
            set fraction2 [/ $lambs2 $sheep2 ]
            set percent1 [* [/ $lambs1 $sheep1 ] 100.]
            set percent2 [* [/ $lambs2 $sheep2 ] 100.]
            set delta1 [abs [- $lambs2 $lambs1] ]
            set scaleupx1  [*  [/ $lambs1 $sheep1 ] 1000. ] 
            set scaleupx2  [*  [/ $lambs2 $sheep2 ] 1000. ]
            set sheepbarley1 [* $sheep1 $workdays2 2. ] 
            set sheepbarley2 [* $sheep2 $workdays2 2. ] 
            set taxinkind1 [* $sheep1 [/ 1. 10. ] ]
            set taxinkind2 [* $sheep2 [/ 1. 10. ] ]
            set side5 [* $side5 1. ]
            set side6 $percent1 
            set side7 $percent2   
            set side8  [* [+ $lambs1 $lambs2 ] [/ 1. 2.] ]   }
        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
            global scaleupx1 scaleupx2 delta1
            global sheepbarley1 sheepbarley2 
            global taxinkind1 taxinkind2
            console show;
            puts "%|table $testcase_number|printed in| tcl wiki format|% "
            puts "&| quantity| value| comment, if any|& "
            puts "&| testcase number:| | $testcase_number|&"
            puts "&| $side1 :|sheep1| $side1 |&"
            puts "&| $side2 :|lambs1| $side2|& "
            puts "&| $side3 :|sheep2|$side3|& "
            puts "&| $side4 :|lambs2 |$side4 |&"
            puts "&| $side5 :|days time period|$side5 |&"
            puts "&| $side6 :|percent1|$side6 |&"
            puts "&| $side7 :|percent2 |$side7 |&"
            puts "&| $sheepbarley1 :| liters  fattening barley feed 1st flock    |$sheepbarley1|&"
            puts "&| $sheepbarley2 :| liters fattening  barley feed 2nd flock   |$sheepbarley1|&"
            puts "&| $taxinkind1 :|tax1 in kind|$taxinkind1 |&"
            puts "&| $taxinkind2 :|tax2 in kind |$taxinkind2 |&"
            puts "&| $side8 :|total lambs in silver pieces|$side8 |&"
            puts "&| $scaleupx1 :|scale up 1 |$scaleupx1  |&"
            puts "&| $scaleupx2 :|scale up 2 |$scaleupx2  |&"
            puts "&| $delta1 :|delta1 in abs |$delta1  |&"
        }
        frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 100.0 80. 100.0 70.  15. 80. 70. 75.}
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 100.0 70. 100.0 60.  30. 70. 60. 65. }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 100.0 80 100.0 40.   60.0 80. 40. 60. }
        ::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 . "Sumerian Sheep and Herd Animals Calculator "

Pushbutton Operation

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 .

Comments Section

Please place any comments here, Thanks.