r247 vs r248
......
14791479
}}}
14801480
이 때 ty가 19자리가 되면 넘친 첫번째 자리의 값을 tx의 일의 자리로 더하고 아래 18자리의 값을 ty로 다시 정의합니다. tx는 19자리 숫자가 되어도 문제가 없습니다.
14811481
{{{#!if ty=ty.toString(), ty.length==19
1482
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty
1482
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18)
14831483
}}}}}}
14841484
이렇게 하면 tx=bu*tw<=au가 됩니다. (bu가 au보다 크면 tw는 tw의 정의에서 값이 0이 되므로 부등호가 성립됩니다.)
1485
ty를 정수로 바꿉니다.
1486
{{{#!if ty=+ty
1487
}}}
14851488
(2.1/1.6 처럼) ty가 넘쳐 tx 값이 더해지는 경우가 있으므로 몫이 유효한 값인지 검산합니다. 만일 tx ty 가 기존 au ab을 넘게 되면 tw에서 1을 빼고, tx, ty를 다시 정의합니다.
14861489
{{{#!if (tx>au)||((tx==au)&&(ty>ab))
14871490
{{{#!if tw-=1, tx=bu*tw, ty=bb*tw
14881491
}}}
14891492
마찬가지로 ty가 19자리가 된다면 넘친 첫번째 자리의 값을 tx의 일의 자리로 더합니다.
14901493
{{{#!if ty=ty.toString(), ty.length==19
1491
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty
1492
}}}}}}}}}
1494
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18)
1495
}}}}}}
1496
ty를 정수로 바꿉니다.
1497
{{{#!if ty=+ty
1498
}}}
1499
}}}
14931500
이렇게 만들어진 tx, ty가 있으면 이를 반영합니다.
14941501
}}}
14951502
ps일 경우 tm의 오른쪽에 "0"을 더합니다.
......
15351542
{{{#!if ab=ab.substr(1,17)+"0"
15361543
}}}}}}
15371544
##i=1 part 1
1538
(변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다.
1545
몫으로 기록할 숫자의 첫번째 자리를 구했다면, 그 다음 자리의 숫자를 찾기 위해 (변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다.
15391546
1540
tn이 빈 문자열이 아니라면 (앞에 au에서 한 자리 수를 떼온 것이므로) tn에 0을 더하여 19자리로 만들고 몫을 구합니다.
1541
{{{#!if tn!=""
1542
tn을 19자리 정수로 바꿉니다. au와 ab 역시 정수로 바꿉니다.
1543
{{{#!if tn+=pd, tn=+tn, au=+au, ab=+bb
1547
au와 ab를 정수로 다시 바꿉니다. 그리고 tn이 빈 문자열이 아니라면 (앞에 au에서 한 자리 수를 떼온 것이므로) tn에 0을 더하여 19자리로 만들고 몫을 구합니다.
1548
{{{#!if au=+au, ab=+ab, tn!=""
1549
tn을 19자리 정수로 바꿉니다.
1550
{{{#!if tn+=pd, tn=+tn,
15441551
}}}
15451552
tz를 몫으로 정의합니다. 앞의 tw를 처리하는 방법과 같습니다. tn을 정수로 만들었으므로 소수점 아래를 비교한다면 정수의 소수점 아래에 해당하는 0과 비교합니다.
15461553
{{{#!if tz=tn/bu, tx=bu*tz, ty=bb*tz
15471554
}}}{{{#!if ty=ty.toString(), ty.length==19
1548
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty
1555
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18)
15491556
}}}}}}
1557
{{{#!if ty=+ty
1558
}}}
15501559
{{{#!if (tx>tn)||((tx==tn)&&(ty>0))
15511560
{{{#!if tz-=1, tx=bu*tz, ty=bb*tz
15521561
}}}{{{#!if ty=ty.toString(), ty.length==19
1553
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty
1554
}}}}}}}}}
1562
{{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18)
1563
}}}}}}
1564
{{{#!if ty=+ty
1565
}}}}}}
15551566
tn에서 나누어떨어지는 값을 뺀 나머지를 반영하여 au, ab에 더합니다. 소수점 아래 부분인 ab보다 ty가 크다면 tn에서 1을 빼어 계산합니다.
15561567
{{{#!if ty>ab
15571568
{{{#!if tn-=1, ab+=+("1"+pd)
......
15631574
}}}
15641575
}}}
15651576
##i=1 part 2
1566
br이 걸려있으면 실행하지 않습니다. 그러므로 전체적으로 조건을 !br로 둔 다음 계산을 진행합니다.
1577
br(0으로 나누어떨어짐) 이 걸려있으면 실행하지 않습니다. 그러므로 전체적으로 조건을 !br로 둔 다음 계산을 진행합니다.
15671578
{{{#!if !br
1568
{{{#!if au=+au, ab=+ab
1579
ps를 false로 초기화한 다음 앞에서 했던 처리와 동일하게 진행합니다.
1580
{{{#if ps=false, ts=((au<bu)||((au==bu)&&(ab<bb))), ts
1581
ts일 경우 ps이고, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다.
1582
{{{#if ps=true
1583
{{{#!if tm+="0"
15691584
}}}
1585
}}}}}}
1586
{{{#!if !ts
1587
tw, tx, ty를 정의하고 처리하는 과정은 앞자리에서 몫을 찾는 과정과 동일합니다. 앞에서 이미 au, ab를 정수로 만들었으므로 여기에 au, ab를 정수로 만드는 처리를 할 필요가 없습니다.
1588
{{{#!if tw=au/bu, tx=bu*tw, ty=bb*tw
1589
}}}{{{#!if ty=ty.toString(), ty.length
1590
15701591
}}}
1592
}}}
1593
}}}
15711594
15721595
15731596
......