r272 vs r273
......
419419
곱셈과 나눗셈에서 a와 b 모두 0이 아닌 경우를 봅니다.
420420
{{{#!if ((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
421421
422
##=== 곱셈 ===
422
##=== 3차 초기화 ===
423423
{{{#!if f=="*"
424424
곱셈계산에서 18자리씩 곱셈을 할 수 있도록 입력했던 a와 b의 문자열을 확장할 것입니다.
425425
......
453453
여기까지 곱셈 또는 나눗셈에서 숫자를 초기화하는 과정입니다.
454454
}}}
455455
456
##=== 곱셈 ===
456457
a와 b 모두 0이 아닌 경우에서 곱셈을 연산하는 과정입니다.
457458
{{{#!if (f=="*")&&((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
458459
곱셈은 18자리를 끊어서 계산합니다. 소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다. 소수점 위 19~36번째 자리는 rs로 두어 ri, rb, ru, rs 순으로 계산합니다.
......
51305131
51315132
##rs 매기기
51325133
앞에 매겼던 ac와 bc로 판별식을 만듭니다. i=ac-bc로 둡니다. a의 가장 큰 자리와 b의 가장 큰 자리가 얼마나 차이나는가에 따라 몫에 매기는 소수점 위치가 달라집니다. i>=-35 (ac==-18이고 bc==17일 경우), i<=35 (ac==17이고 bc=-18일 경우)입니다.
5133
5134
{{{#!if i=ac-bc
5135
}}}
5136
ps를 false로 초기화합니다. i가 충분히 큰 값인 상황이면 ps를 true로 바꿉니다.
5137
{{{#!if ps=false
5138
}}}
51345139
i가 18 이상 (18 이상 35 이하)이면 rs를 매길 수 있습니다. 몫을 적어놓은 문자열 tm의 0번 index에 들어가는 문자부터 i에서 18을 뺀 값의 index에 들어가는 문자까지를 rs로 두며, rs의 문자열 길이는 i-18+1 곧 i-17입니다.
5135
{{{#!if i=ac-bc, i>=18
5140
{{{#!if i>=18
51365141
tm에서 rs를 오려낸 문자열을 tm으로 다시 둡니다.
51375142
{{{#!if rs=tm.substr(0,i-17), tm=tm.substr(i-17)
51385143
}}}}}}
5144
51395145
##ru 매기기
5140
i>=18 이 되(어 rs를 매기)는 경우 i17로 맞춥니다.
5146
i>=18 이 되(어 rs를 매기)는 경우 pstrue로 맞춥니다.
51415147
{{{#!if i>=18
5142
{{{#!if i=17
5148
{{{#!if ps=true
51435149
}}}}}}
5144
i가 0 이상 (0 이상 17 이하)면 ru를 매길 수 있으며 문자열의 길이는 i+1이 됩니다.
5145
{{{#!if i>=0
5150
ps가 true이면 문자열 tm에서 18번째 자리까지를 ru로 두고, tm에서 ru를 오려낸 문자열을 tm으로 둡니다.
5151
{{{#!if ps
5152
{{{#!if ru=tm.substr(0,18), tm=tm.substr(18)
5153
}}}}}}
5154
psfalse이고 (i가 충분히 큰 값이 아니고) i가 0 이상 (0 이상 17 이하)인 수라면 ru를 매길 수 있으며 문자열의 길이는 i+1이 됩니다.
5155
{{{#!if !ps&&(i>=0)
51465156
{{{#!if ru=tm.substr(0,i+1), tm=tm.substr(i+1)
51475157
}}}}}}
51485158
51495159
##rb 매기기
5150
i>=0이 되(어 ru를 매기)는 경우 i-1로 맞춥니다.
5160
i>=0이 되(어 ru를 매기)는 경우 pstrue로 맞춥니다.
51515161
{{{#!if i>=0
5152
{{{#!if i=-1
5162
{{{#!if ps=true
51535163
}}}}}}
5154
i-18 (-18 이상 -1 이하)이면 rb 매길 있으며 문자열 길이는 i+18+1 곧 i+19가 됩니다.
5155
{{{#!if i>=-18
5156
{{{#!if rb=tm.substr(0,i+19), tm=tm.substr(i+19), rb=rb+pd, rb=rb.substr(0,18)
5164
pstrue 문자열 tm에서 18번째 자리까지를 rb 두고, tm에서 rb를 오려낸 문자열 tm으로 니다.
5165
{{{#!if ps
5166
{{{#!if rb=tm.substr(0,18), tm=tm.substr(18)
51575167
}}}}}}
5168
ps가 false이고 i가 -18 이상 (-18 이상 -1 이하)이면 rb를 매길 수 있습니다.
5169
이 때 몫으로 문자열의 길이는 i+18+1 곧 i+19가 되며, 그 앞부분은 0으로 채워집니다.
5170
{{{#!if !ps&&(i>=-18)
5171
{{{#!if rb=tm.substr(0,i+19), tm=tm.substr(i+19), rb=pd+rb, rb=rb.substr(rb.length-18,18)
5172
}}}}}}
51585173
51595174
##ri 매기기
5160
i>=-18이 되(어 rb를 매기)는 경우 i-19로 맞춥니다.
5175
i>=-18이 되(어 rb를 매기)는 경우 pstrue로 맞춥니다.
51615176
{{{#!if i>=-18
5162
{{{#!if i=-19
5177
{{{#!if ps=true
51635178
}}}}}}
5164
i-19 (-36이상 -19 이하이나, i의 최소값-35)이면 ri를 매 있습니다.
5165
{{{#!if i>=-36
5166
{{{#if false
5167
{{{#!if ri=tm.substr(0,i+37), tm=tm.substr(i+37), ri=ri+pd, ri=ri.substr(0,18)
5179
pstrue rb와 방법으로 ri를 매기고, tm을 다시 정의합니다.
5180
{{{#!if ps
5181
{{{#!if ri=tm.substr(0,18), tm=tm.substr(18)
51685182
}}}}}}
5169
{{{#!if ri=tm.substr(0,18), tm=tm.substr(18), ri=ri+pd, ri=ri.substr(0,18)
5170
}}}}}}
5183
ps가 false이며 i가 -19 이하 (-36이상 -19 이하이나, i의 최소값은 -35)이면 ri를 매길 수 있습니다. rb와 같습니다.
5184
{{{#!if !ps&&(i>=-36)
5185
{{{#!if ri=tm.substr(0,i+37), tm=tm.substr(i+37), ri=pd+ri, ri=ri.substr(ri.length-18,18)
5186
}}}
5187
}}}
5188
51715189
여기까지가 나눗셈의 계산과정입니다.
51725190
}}}
51735191
......