r212 vs r213
......
359359
}}}}}}
360360
361361
{{{#!if f=="/"
362
나눗셈은 처음으로 0이 아닌 숫자부터릿수를 왼쪽으로 니다.
363
{{{#!if
362
나눗셈은 소수점 위 18번째 자리부터 내려가면서 처음으로 0이 아닌 숫자 있으면 그 숫가 처음 숫자가 되도록 숫자를 왼쪽으로 밀어두려고 합니다. 그 다음 오른쪽을 0으로 채웁니다.
363
--앞자리에 0만 여러 개 적어놓고 장난치는 사람이 있을까봐-- au를 값으로 바꾼 다음 다시 문자열로 변환하여 앞자리에 있는 0들을 모두 삭제합니다. bu도 그렇게 둡니다.
364
{{{#!if au=+au, au=au.toString(), bu=+bu, bu=bu.toString()
364365
}}}
366
au를 왼쪽으로 밀 경우 남게 되는 자릿수를 변수 tw로 둡니다. (후술할 아래 곱셈연산과 겹치지 않습니다.)
367
{{{#!if tw=18-au.length
368
365369
}}}
366370
}}}
371
}}}
367372
여기까지 곱셈 또는 나눗셈에서 숫자를 초기화하는 과정입니다.
368373
}}}}}}
369374
370375
a와 b 모두 0이 아닌 경우에서 곱셈을 연산하는 과정입니다.
371376
{{{#!if (f=="*")&&((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
372377
곱셈은 18자리를 끊어서 계산합니다. 소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다. 소수점 위 19~36번째 자리는 rs로 두어 ri, rb, ru, rs 순으로 계산합니다.
378
소수점 위 18자리, 소수점 아래 18자리인 두 수를 곱하면 해당하는 자리별로 곱셈을 할 때 최대 (18+18)**2=1296회를 곱해야 합니다.
373379
374380
앞으로 있을 계산은 다음과 같습니다.
375381
* ri를 더했더니 ri가 19자리 숫자로 넘치면 넘친 앞의 1자리를 rb로 넘깁니다.
......