r267 vs r268
......
357357
여기까지가 덧셈 또는 뺄셈연산의 계산과정이며 과정은 이후 rb 정리 과정으로 넘어갑니다.
358358
}}}}}}
359359
360
##== 곱셈 & 나눗셈 ==
361
##=== 숫자 초기화 ===
360362
{{{#!if (f=="*")||(f=="/")
361363
곱셈 및 나눗셈 연산과정을 봅니다.
362364
18자리 숫자로 입력할 수 있는 최대 정수는 999,999,999,999,999,999입니다.
......
378380
{{{#!if au=+au, au=au.toString(), bu=+bu, bu=bu.toString()
379381
}}}
380382
383
##=== 자릿수 측정 ===
384
나누는 자릿수에 맞춰 결과를 표시하고자 ac, bc를 자릿수를 나타내는 값으로 정의합니다.
385
먼저 au는 앞에 적어놓은 0을 제거한 문자열이므로 +au>0인 경우 ac를 au의 문자열 길이에서 1을 뺀 값으로 정의합니다.
386
{{{#!if +au>0
387
{{{#!if ac=au.length-1
388
}}}}}}
389
(au, ab 둘다 0인 경우 앞에 처리하는 식이 있으며) au가 0이라면 ab는 0보다 크며, 소수점 아래 처음으로 0이 아닌 수가 나오는 자릿수를 고른 다음 덧셈 연산에서 그 수의 역원이 되는 수를 ac로 정의합니다. 이를 구하고자 뒤에 0을 더 붙여 18자리 숫자로 만든 다음 정수로 바꾸어 구합니다.
390
{{{#!if +au==0
391
{{{#!if ac=ab+pd, ac=ac.substr(0,18), ac=+ac, ac=ac.toString(), ac=ac.length-19
392
}}}}}}
381393
394
bc도 a와 같은 방법으로 정의합니다.
395
{{{#!if +bu>0
396
{{{#!if bc=bu.length-1
397
}}}}}}{{{#!if +bu==0
398
{{{#!if bc=bb+pd, bc=bc.substr(0,18), bc=+bc, bc=bc.toString(), bc=bc.length-19
399
}}}}}}
400
401
##=== 0인자 처리 ===
382402
a 또는 b값이 0이 되려면 au, ab 둘 다 0이 되거나 bu, bb 둘 다 0이 되어야 합니다. a 또는 b 값이 0일 경우 당연히 음수 부호가 표시되지 않습니다.
383403
{{{#!if ((+au==0)&&(+ab==0))||((+bu==0)&&(+bb==0))
384404
곱셈에서 0을 곱하면 0이 되므로, 곱셈의 경우 a 또는 b가 0이 될 때 계산 결과에 0을 반환합니다.
......
399419
곱셈과 나눗셈에서 a와 b 모두 0이 아닌 경우를 봅니다.
400420
{{{#!if ((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
401421
422
##=== 곱셈 ===
402423
{{{#!if f=="*"
403424
곱셈계산에서 18자리씩 곱셈을 할 수 있도록 입력했던 a와 b의 문자열을 확장할 것입니다.
404425
......
14341455
14351456
au, ab, bu, bb를 18자로 만들었으므로 36자리 정수의 나눗셈으로 봅니다.
14361457
a/b=(au+ab)/(bu+bb)=(+(au.substr(0,18)+ab.substr(0,18)))/(+(bu.substr(0,18)+bb.substr(0,18)))와 같습니다.
1437
## 자릿수 측정
1438
나누는 자릿수에 맞춰 결과를 표시하고자 ac, bc를 자릿수를 나타내는 값으로 정의합니다.
1439
먼저 au는 앞에 적어놓은 0을 제거한 문자열이므로 +au>0인 경우 ac를 au의 문자열 길이에서 1을 뺀 값으로 정의합니다.
1440
{{{#!if +au>0
1441
{{{#!if ac=au.length-1
1442
}}}}}}
1443
(au, ab 둘다 0인 경우 앞에 처리하는 식이 있으며) au가 0이라면 ab는 0보다 크며, 소수점 아래 처음으로 0이 아닌 수가 나오는 자릿수를 고른 다음 덧셈 연산에서 그 수의 역원이 되는 수를 ac로 정의합니다. 이를 구하고자 뒤에 0을 더 붙여 18자리 숫자로 만든 다음 정수로 바꾸어 구합니다.
1444
{{{#!if +au==0
1445
{{{#!if ac=ab+pd, ac=ac.substr(0,18), ac=+ac, ac=ac.toString(), ac=ac.length-19
1446
}}}}}}
14471458
1448
bc도 a와 같은 방법으로 정의합니다.
1449
{{{#!if +bu>0
1450
{{{#!if bc=bu.length-1
1451
}}}}}}{{{#!if +bu==0
1452
{{{#!if bc=bb+pd, bc=bc.substr(0,18), bc=+bc, bc=bc.toString(), bc=bc.length-19
1453
}}}}}}
1454
1455
1456
##자릿수 기억 (이후에 서술)
14571459
##몫 서술
14581460
제일 높은 자리부터 내려오면서 처음으로 0이 아닌 수를 왼쪽으로 당기는 과정을 거쳤으므로 (1부터 시작하는 18자리+18자리 숫자)/(1부터 시작하는 18자리+18자리 수) 연산이 됩니다.
14591461
......