** Probability Exponential Density Calculator and eTCL Slot Calculator Demo Example ** 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 probability and the exponential density function for modeling product lifetimes. The impetus for these calculations was checking product lifetimes in some lightbulbs. Most of the testcases involve replicas or models, using assumptions and rules of thumb. In planning any software, it is advisable to gather a number of testcases to check the results of the program. Additional significant figures are used to check the eTCL calculator, not to infer the accuracy of inputs and product reports. Using 0.0014 as the exponential density coefficient, the following three testcases were run. 1) The probability for product lifetime up to 500 hours was 0.5034 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*500.}),0.5034146. The probability for product lifetime of the interval between 1000 and 1500 hours was 0.1241 from eTCL. The hand calculator returned (1.-exp({* -0.0014 1500. })) -(1.-exp({* -0.0014 1000. })), 0.12414050. 2) The probability for product lifetime up to 1000 hours was 0.7534 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*1000.}), 0.7534030. The probability for product lifetime of the interval between 1200 and 1500 hours was 0.06391 from eTCL. The hand calculator returned (1.-exp({* -0.0014 1500. })) -(1.-exp({* -0.0014 1200. })), 0.06391750. 3) The probability for product lifetime up to 1200 hours was 0.8136 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*1200.}), 0.8136260. The probability for product lifetime of the interval between 1200 and 2000 hours was 0.0616 from eTCL. The hand calculator returned (1.-exp({* -0.0014 2000. })) -(1.-exp({* -0.0014 1200. })), 0.061646360. The eTCL calculator is working well in the expected operating range. Using the three testcases, another way to check the internal consistency is to use similar time intervals. For example, enter time1=500 hours, time2=0.000001 hours, and time3=500 hours. The result for the first interval between zero and 500 hours is 0.5034146962085905 and the second interval between 0.00001 and 500 hours is 0.5034146948085905, showing agreement to 3 significant figures. Similar intervals for zero/0.000001 to 1000 shows 0.7534030360583935 and 0.7534030346583935 and for zero/0.000001 to 1200 shows 0.81362602396059 and 0.81362602256059. Since 1E-6 hours only approximates zero, differences between interval evaluations can be expected at 6 decimal places and beyond. For another internal consistency check, since the area of the exponential density function is equal to unity between zero and infinity in the plus direction, the eTCL calculator returns ~1 for large intervals of time (time1>>10000.). For example, enter time1=10000 hours, time2=0.000001 hours, and time3=10000 hours and the result is 0.99999916, approaching unity. For the eTCL calculator, the recommended procedure is push testcase and fill frame to initialize the display. Then change first three entries etc, and push solve. The coefficient for the exponential density function is defaulted to 0.0014, but can be changed for different testcases. The calculations for the first interval up to time1 and the second interval between time2 and time3 are carried in separate tracks inside the eTCL program. Meaning, changing time1 will not effect the calculations for time2 and time3. Report allows copy and paste from console. *** 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 1|printed in| tcl wiki format|% &| quantity| value| comment, if any|& &| testcase number:| | 1|& &| 100.0 :|sheep1| 100.0 |& &| 80.0 :|lambs1| 80.0|& &| 100.0 :|sheep2|100.0|& &| 70.0 :|lambs2 |70.0 |& &| 15.0 :|days time period|15.0 |& &| 80.0 :|percent1|80.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 kind|10.0 |& &| 10.0 :|tax2 in kind |10.0 |& &| 75.0 :|total lambs in silver pieces|75.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 2|printed in| tcl wiki format|% &| quantity| value| comment, if any|& &| testcase number:| | 2|& &| 100.0 :|sheep1| 100.0 |& &| 70.0 :|lambs1| 70.0|& &| 100.0 :|sheep2|100.0|& &| 60.0 :|lambs2 |60.0 |& &| 30.0 :|days time period|30.0 |& &| 70.0 :|percent1|70.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 kind|10.0 |& &| 10.0 :|tax2 in kind |10.0 |& &| 65.0 :|total lambs in silver pieces|65.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 3|printed in| tcl wiki format|% &| quantity| value| comment, if any|& &| testcase number:| | 3|& &| 100.0 :|sheep1| 100.0 |& &| 80.0 :|lambs1| 80.0|& &| 100.0 :|sheep2|100.0|& &| 40.0 :|lambs2 |40.0 |& &| 60.0 :|days time period|60.0 |& &| 80.0 :|percent1|80.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 kind|10.0 |& &| 10.0 :|tax2 in kind |10.0 |& &| 60.0 :|total lambs in silver pieces|60.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 4|printed in| tcl wiki format|% &| quantity| value| comment, if any|& &| testcase number:| 4| stats on 2 sheep herds |& &| 100.0 :|sheep1|includes rams and ewes |& &| 80.0 :|lambs1| all immature |& &| 10.0 :|sheep2|includes rams and ewes |& &| 4.0 :|lambs2 | all immature |& &| 10.0 :|days time period|typical 1 month |& &| 80.0 :|percent1|100.*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 kind|on 2nd herd |& &| 42.0 :|total lambs in silver pieces|shekles 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 year|withdrawn, sold, gifted |& &| 161.0 :|total herd inspected 2nd year | less uninspected animals and withdrawn|& ---- ***Screenshots Section*** ****figure 1.**** [http://s1.postimg.org/7nrwm5lnz/sumerian_bronze_calculator_TCL_WIKI_2.png] ---- ***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 [https://cdli.ucla.edu/staff/englund/publications/englund2012a.pdf] * Ur III Tablets in the Valdosta State University, search on cdli * Cuneiform Digital Library Journal, search on Equivalency Values * Ur III Equivalency Values[http://cdli.ox.ac.uk/wiki/doku.php?id=ur_iii_equivalency_values] * 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 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 |&" ====== ---- [gold] This page is copyrighted under the TCL/TK license terms, [http://tcl.tk/software/tcltk/license.html%|%this license]. **Comments Section** <> Please place any comments here, Thanks. <> Numerical Analysis | Toys | Calculator | Mathematics| Example