| r239 vs r240 | ||
|---|---|---|
| ... | ... | |
| 30 | 30 | |
| 31 | 31 | ##== 초기화 == |
| 32 | 32 | 값을 미리 정의하여 초기화합니다. 중간에 --장난으로-- 계산에 사용되는 변수에 값을 부여한 채로 include 하더라도 이를 무시합니다. |
| 33 | {{{#!if this.as=a.toString(), this.bs=b.toString(), this.rs=0+0, this.ru=0+0, this.rb=0+0, this.ri=0+0, this.rp=0+0, this.i=0+0, this.tu=0, this.tv=1+0, this.tw=0, this.tx=0, this.ty=0, this.ea=0+0, this.eb=0+0, this.wa=0+0, this.wb=0+0, this.ps=false, this.ts=false, this.br=false, this.ns="", this.ma="", this.mb="", this.tm="", this.pd="000000000000000000" | |
| 33 | {{{#!if this.as=a.toString(), this.bs=b.toString(), this.rs=0+0, this.ru=0+0, this.rb=0+0, this.ri=0+0, this.rp=0+0, this.i=0+0, this.tu=0, this.tv=1+0, this.tw=0, this.tx=0, this.ty=0, this.ea=0+0, this.eb=0+0, this.wa=0+0, this.wb=0+0, this.ps=false, this.ts=false, this.br=false, this.ns="", this.ma="", this.mb="", this.tm="", this.tn="", this.pd="000000000000000000" | |
| 34 | 34 | }}}{{{#!if this.al=as.length, this.bl=bs.length, this.ad=as.indexOf("."), this.bd=bs.indexOf(".") |
| 35 | 35 | }}}{{{#!if ad!=-1 |
| 36 | 36 | 소수점이 발견되는 자리 번호가 ad이므로 ad+1번에 해당되는 자리부터 끝까지 표기합니다. |
| ... | ... | |
| 160 | 160 | {{{#!if bb=bb.substr(0,bp-1), bp=bp-1 |
| 161 | 161 | }}}}}} |
| 162 | 162 | |
| 163 | 유효성 검사에 쓰인 tm과 tn 값을 빈 문자열 값으로 초기화합니다. | |
| 164 | {{{#!if tm="", tn="" | |
| 165 | }}} | |
| 166 | ||
| 163 | 167 | ##== 덧셈, 뺄셈 == |
| 164 | 168 | 덧셈과 뺄셈 계산과정을 적어봅니다. |
| 165 | 169 | {{{#!if (f=="+")||(f=="-") |
| ... | ... | |
| 1456 | 1460 | }}}다시 정렬된 bu, bb의 값은 바뀌지 않습니다. bu, bb로 나눈 몫만큼 au, ab에서 감소시킨 다음 au와 ab를 다시 정렬시키며, au와 ab가 모두 0이 되면 더 이상 계산하지 않도록 br를 true로 반환합니다. |
| 1457 | 1461 | au와 ab의 값을 가져와 tu와 tv로 먼저 복제합니다. |
| 1458 | 1462 | {{{#!if tu=au, tv=ab |
| 1459 | }}} | |
| 1463 | }}} | |
| 1460 | 1464 | 그 다음 계산을 편하게 할 수 있도록 텍스트값으로 된 au, ab, bu, bb를 정수값으로 변환합니다. |
| 1461 | 1465 | {{{#!if au=+au, ab=+bb, bu=+bu, bb=+bb |
| 1462 | 1466 | }}} |
| ... | ... | |
| 1465 | 1469 | {{{#if ts=((au<bu)||((au==bu)&&(ab<bb))), ts |
| 1466 | 1470 | {{{#if ps=true |
| 1467 | 1471 | }}}}}} |
| 1468 | !ts이러면 ① au>bu이거나, ② au==bu이고 ab>=bb인 경우입니다. !ts | |
| 1469 | {{{#!if !ts | |
| 1472 | !ts이러면 ① au>bu이거나, ② au==bu이고 ab>=bb인 경우입니다. !ts이고 !ps(다음 자릿수로 계산을 넘기지 않음)임을 if 조건문으로 둔 상태에서 진행합니다. | |
| 1473 | {{{#!if !ts&&!ps | |
| 1470 | 1474 | au를 bu로 나눈 몫을 tw로 정의합니다. 정수를 정수로 나누면 몫만 계산되며, 100,000,000,000,000,000 이상 999,999,999 999,999,999 이하의 한 정수를 100,000,000,000,000,000 이상의 다른 한 정수로 나눈 몫이므로 tw의 값은 최소 0 최대 9가 됩니다. |
| 1471 | 1475 | {{{#!if tw=au/bu |
| 1472 | 1476 | }}} |
| 1473 | 1477 | bu, bb를 각각 tw만큼 곱한 값을 tx, ty로 정의합니다. |
| 1474 | 1478 | {{{#!if tx=bu*tw, ty=bb*tw |
| 1475 | 1479 | }}} |
| 1476 | 이 때 ty가 19자리가 되면 넘친 첫번째 자리 | |
| 1477 | 이렇게 하면 t | |
| 1480 | 이 때 ty가 19자리가 되면 넘친 첫번째 자리의 값을 tx의 일의 자리로 더하고 아래 18자리의 값을 ty로 다시 정의합니다. tx는 19자리 숫자가 되어도 문제가 없습니다. | |
| 1481 | {{{#!if ty=ty.toString(), ty.length==19 | |
| 1482 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty | |
| 1483 | }}}}}} | |
| 1484 | 이렇게 하면 tx=bu*tw<=au가 됩니다. (bu가 au보다 크면 tw는 tw의 정의에서 값이 0이 되므로 부등호가 성립됩니다.) | |
| 1485 | (2.1/1.6 처럼) ty가 넘쳐 tx 값이 더해지는 경우가 있으므로 몫이 유효한 값인지 검산합니다. 만일 tx ty 가 기존 au ab을 넘게 되면 tw에서 1을 빼고, tx, ty를 다시 정의합니다. | |
| 1486 | {{{#!if (tx>au)||((tx==au)&&(ty>ab)) | |
| 1487 | {{{#!if tw-=1, tx=bu*tw, ty=bb*tw | |
| 1488 | }}} | |
| 1489 | 마찬가지로 ty가 19자리가 된다면 넘친 첫번째 자리의 값을 tx의 일의 자리로 더합니다. | |
| 1490 | {{{#!if ty=ty.toString(), ty.length==19 | |
| 1491 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18), ty=+ty | |
| 1492 | }}}}}}}}} | |
| 1493 | 이렇게 만들어진 tx, ty가 있으면 이를 반영합니다. | |
| 1494 | }}} | |
| 1495 | ps일 경우 tm의 오른쪽에 "0"을 더합니다. | |
| 1496 | {{{#!if ps | |
| 1497 | {{{#!if tm+="0" | |
| 1498 | }}}}}} | |
| 1499 | !ps일 경우 tm의 오른쪽에 tw를 문자열로 바꾼 텍스트를 더합니다. | |
| 1500 | {{{#!if !ps | |
| 1501 | {{{#!if tw=tw.toString(), tm+=tm | |
| 1502 | }}}}}} | |
| 1478 | 1503 | |
| 1479 | 1504 | |
| 1480 | ||
| 1481 | 1505 | ##rs 매기기 |
| 1482 | 1506 | |
| 1483 | 1507 | ##ru 매기기 |
| ... | ... | |
| 1485 | 1509 | ##rb 매기기 |
| 1486 | 1510 | |
| 1487 | 1511 | ##ri 매기기 |
| 1512 | ||
| 1513 | 여기까지가 나눗셈의 계산과정입니다. | |
| 1488 | 1514 | }}} |
| 1489 | 1515 | |
| 1516 | 연산이 끝났으면 표기된 숫자를 정리합니다. | |
| 1517 | ||
| 1490 | 1518 | ##ru 정리 부분 |
| 1491 | 1519 | 먼저 ru를 문자열로 변환합니다. 18자리씩 끊어 표기하므로 소수점 위 19~36번째 자리에 해당하는 rs값이 (곱한 값을 더했는데도) 0일 경우 rs를 빈 문자열로 바꿉니다. 곱셈과정에서 ru의 윗자리인 rs값이 0보다 클 경우, 1~18번째 자리인 ru에 빈 자리를 채우도록 ru의 왼쪽을 0으로 채웁니다. |
| 1492 | 1520 | {{{#!if ru=ru.toString() |
| ... | ... |