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

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 and date in your comment with the same courtesy that I will give you. Aside from your courtesy, your wiki MONIKER and date as a signature and minimal good faith of any internet post are the rules of this TCL-WIKI. Its very hard to reply reasonably without some background of the correspondent on his WIKI bio page. Thanks, gold 12Dec2018



Introduction

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 an 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 for two sheep herds includes rules of thumb and modern assumptions.Additional significant figures are used to check the eTCL calculator, not to infer the accuracy of ancient texts. 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. For the combined first and second herds, the combined percentage of lambs was ((80+4)/(100+10))*100, 76.363 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 model problem of two sheep herds, an example formula could consider the first herd as the prior year and the second herd as the current year. In that case, the formula should be $total_herd = $sheep1 + $lambs1+$sheep2+$lambs2,100+80+10+4,194 animals. Meaning, the maximum of the herd in the second year (after spring lambs) is before animals are withdrawn to be sold, gifted to priests, or paid to herdsmen. Assuming 3 lambs withdrawn in the second year, the total $current_herd should be 100+80+10+4-3, 191 animals. In some later Neo-Babylonian texts, some animals in large herds were noted as not seen or inspected. Given 30 sheep in a far mountain pasture, a trial formula for sheep missing in inspection might be $inspected_herd = $current_herd - $uninspected. The inspected herd or available herd was 191 -30, 161 animals.

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

Testcase 4

table 4printed in tcl wiki format
quantity value comment, if any
testcase number: 4 stats on 2 sheep herds
100.0 :sheep1includes rams and ewes
80.0 :lambs1 all immature
10.0 :sheep2includes rams and ewes
4.0 :lambs2 all immature
10.0 :days time periodtypical 1 month
80.0 :percent1100.*lambs1/sheep1, not used by ancients
40.0 :percent2 100.*lambs2/sheep2,not used by ancients
2000.0 : liters fattening barley feed 1st flock 1 sila vol = 1 liter
200.0 : liters fattening barley feed 2nd flock 1 sila vol = 1 liter
10.0 :tax1 in kind on 1st herd
1.0 :tax2 in kindon 2nd herd
42.0 :total lambs in silver piecesshekles or gin
76.363 :combined percentage for 2 herds 100.*lambs/sheep percentage
below are test formulas for >balanced accounts<
assumes 1st herd is prior year 2nd herd is current year
800.0 :scale up 1 test factor, 1st herd
400.0 :scale up 2 test factor, 2nd herd
76.0 :delta lambs in abs abs(lambs1-lambs2)
3. :animals withdrawn in current year sold or given to priests
30. :animals not inspected possible far pasture
194.0 :total herd maximum includes 1st and 2nd years, after 2nd spring lambs
191.0 :total herd less withdrawn in 2nd yearwithdrawn, sold, gifted
161.0 :total herd inspected 2nd year less uninspected animals and withdrawn


References:

  • Growth of a
  • Herd of Cattle in Ten Years Ignace Gelb, JCS 21 (1967): 64-69
  • On Dairy Productivity at Ur in the Late
  • Ur III Period, JESHO 23 (1980): 1-42. Tohru Gomi
  • Birmingham Cuneiform Texts - Translations
  • Part 1: Neo-Sumerian,Phil Watson
  • 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

Screenshots Section

Figure 1

Sheep and Herd Animal Calculator and eTCL Slot Calculator screenshot

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 pieces:}
        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 combined_percent
            global animals_withdrawn un_inspected
            global total_herd inspected_herd 
            global total_herd_withdrawn
            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 sheep_add [+ $sheep1 $sheep2 ]
            set lambs_add [+ $lambs1 $lambs2 ]
            set combined_percent [* [/ $lambs_add $sheep_add ] 100. ]
            set animals_withdrawn 3.
            set un_inspected 30.
            set total_herd [+ $sheep1 $lambs1 $sheep2 $lambs2 ]
            set total_herd_withdrawn [- $total_herd $animals_withdrawn ]
            set inspected_herd [- $total_herd_withdrawn $un_inspected ]     
            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 combined_percent
            global animals_withdrawn un_inspected
            global total_herd inspected_herd 
            global total_herd_withdrawn
            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|includes rams and ewes   |&"
            puts "&| $side2 :|lambs1| all immature |& "
            puts "&| $side3 :|sheep2|includes rams and ewes |& "
            puts "&| $side4 :|lambs2 | all immature  |&"
            puts "&| $side5 :|days time period|typical 1 month |&"
            puts "&| $side6 :|percent1|100.*lambs1/sheep1, not used by ancients |&"
            puts "&| $side7 :|percent2 |100.*lambs2/sheep2,not used by ancients |&"
            puts "&| $sheepbarley1 :| liters  fattening barley feed 1st flock    |1 sila vol = 1 liter |&"
            puts "&| $sheepbarley2 :| liters fattening  barley feed 2nd flock   |1 sila vol = 1 liter |&"
            puts "&| $taxinkind1 :|tax1 in kind| on 1st herd |&"
            puts "&| $taxinkind2 :|tax2 in kind|on 2nd herd |&"
            puts "&| $side8 :|total lambs in silver pieces|shekles or gin  |&"
            puts "&| $combined_percent :|combined percentage for 2 herds | 100.*lambs/sheep percentage |&"     
            puts "&| below are test formulas |for |>balanced accounts<  |&"
            puts "&| assumes |1st herd is prior year | 2nd herd is current year |&"
            puts "&| $scaleupx1 :|scale up 1 |test factor, 1st herd  |&"
            puts "&| $scaleupx2 :|scale up 2 |test factor, 2nd herd   |&"
            puts "&| $delta1 :|delta lambs in abs |abs(lambs1-lambs2)   |&"
            puts "&| $animals_withdrawn :|animals withdrawn in current year | sold or given to priests |& "
            puts "&| $un_inspected :|animals not inspected |possible far pasture   |&" 
            puts "&| $total_herd :|total herd maximum |includes 1st and 2nd years, after 2nd spring lambs  |&"
            puts "&| $total_herd_withdrawn :|total herd less withdrawn in 2nd year|withdrawn, sold, gifted  |&"
            puts "&| $inspected_herd :|total herd inspected 2nd year |  less uninspected animals and withdrawn|&"
   
        }
        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   |&"  

Comments Section


Please place any comments here with your wiki MONIKER and date, Thanks.gold12Dec2018.