Integer long division: Difference between revisions

→‎{{header|Wren}}: Amended so can deal with positive integers of unlimited size (limited to 15 digits previously).
m (remove unneeded code)
(→‎{{header|Wren}}: Amended so can deal with positive integers of unlimited size (limited to 15 digits previously).)
Line 118:
=={{header|Wren}}==
This is based on the Python code [http://codepad.org/hKboFPd2 here].
<lang ecmascript>varimport divide"/big" =for Fn.new { |m, n|BigInt
 
var divide = Fn.new { |m, n|
if (m < 0) Fiber.abort("m must not be negative")
if (n <= 0) Fiber.abort("n must be positive.")
var quotient = (m/n).floor.toString + "."
var c = 10 * (m % n) * 10
var zeros = 0
while (c > 0 && c < n) {
Line 133 ⟶ 135:
var i = 0
while (true) {
ifvar (passed.containsKey(c))cs {= c.toString
if (passed.containsKey(cs)) {
var prefix = digits[0...passed[c]]
var repetendprefix = digits[0...passed[ccs]..-1]
var prefixrepetend = digits[0...passed[ccs]..-1]
var result = quotient + prefix + "(" + repetend + ")"
result = result.replace("(0)", "").trimEnd(".")
Line 149 ⟶ 152:
return [result + "....", repetend, repetend.count]
}
var q = (c / n).floor
var r = c % n
passed[ccs] = i
digits = digits + q.toString
i = i + 1
c = 10r * r10
}
}
 
var tests = [
var tests = [0, 1], [1, 1], [1, 3], [1, 7], [83,60], [1, 17], [10, 13], [3227, 555], [1, 149] ]
[476837158203125, "9223372036854775808"], [1, 149], [1, 5261]
]
for (test in tests) {
var a = BigInt.new(test[0])
var b = BigInt.new(test[1])
var res = divide.call(a, b)
System.print("%(a)/%(b) = %(res[0])")
Line 170 ⟶ 176:
{{out}}
<pre>
0/1 = 0
Repetend is ''
Period is 0
 
1/1 = 1
Repetend is ''
Line 181 ⟶ 191:
Repetend is '142857'
Period is 6
 
83/60 = 1.383....
Repetend is '3'
Period is 1
 
1/17 = 0.0588235294117647....
Line 193 ⟶ 207:
Repetend is '144'
Period is 3
 
476837158203125/9223372036854775808 = 0.000051698788284564229679463043254372678347863256931304931640625
Repetend is ''
Period is 0
 
1/149 = 0.0067114093959731543624161073825503355704697986577181208053691275167785234899328859060402684563758389261744966442953020134228187919463087248322147651....
Repetend is '0067114093959731543624161073825503355704697986577181208053691275167785234899328859060402684563758389261744966442953020134228187919463087248322147651'
Period is 148
 
1/5261 = 0.00019007793195210036114807070899068618133434708230374453525945637711461699296711651777228663752138376734461129062915795476145219540011404675917126021668884242539441170880060824938224672115567382626877019578026991066337198251283026040676677437749477285687131724006842805550275613001330545523664702528036494962934803269340429576126211746816194639802318950769815624406006462649686371412279034404105683330165367800798327314198821516821896977760881961604257745675727048089716783881391370461889374643603877589811822847367420642463409998099220680478996388519292910093138186656529176962554647405436228853830070328834822277133624786162326553887093708420452385478045998859532408287397833111575746055882911993917506177532788443261737312298042197300893366280174871697395932332256225052271431286827599315719444972438699866945447633529747196350503706519673065957042387378825318380536019768104923018437559399353735031362858772096559589431666983463219920167268580117848317810302223911803839574225432427295191028321611860862953811062535639612241018817715263257935753659....
Repetend is '00019007793195210036114807070899068618133434708230374453525945637711461699296711651777228663752138376734461129062915795476145219540011404675917126021668884242539441170880060824938224672115567382626877019578026991066337198251283026040676677437749477285687131724006842805550275613001330545523664702528036494962934803269340429576126211746816194639802318950769815624406006462649686371412279034404105683330165367800798327314198821516821896977760881961604257745675727048089716783881391370461889374643603877589811822847367420642463409998099220680478996388519292910093138186656529176962554647405436228853830070328834822277133624786162326553887093708420452385478045998859532408287397833111575746055882911993917506177532788443261737312298042197300893366280174871697395932332256225052271431286827599315719444972438699866945447633529747196350503706519673065957042387378825318380536019768104923018437559399353735031362858772096559589431666983463219920167268580117848317810302223911803839574225432427295191028321611860862953811062535639612241018817715263257935753659'
Period is 1052
</pre>
9,476

edits