| r198 vs r199 | ||
|---|---|---|
| ... | ... | |
| 50 | 50 | |
| 51 | 51 | {{{#!if ((bu[0]!=45)&&(bu.length>=19))||((bu[0]==45)&&(bu.length>=20)) |
| 52 | 52 | error code of b 01번 : 오버플로 |
| 53 | {{{#!if eb= | |
| 53 | {{{#!if eb=1 | |
| 54 | 54 | }}}}}} |
| 55 | 55 | {{{#!if bb.length>=19 |
| 56 | 56 | warning code of b 01번 : 소수점 아래 자릿수를 너무 많이 입력했습니다. 소수점 아래 18자리까지만 취급합니다. |
| 57 | {{{#!if wb= | |
| 57 | {{{#!if wb=1, bb=bb.substr(0,18), bp=18 | |
| 58 | 58 | }}}}}} |
| 59 | 59 | |
| 60 | 60 | ##반점(,)을 자동적으로 생략하고 들어가는 것은 나중에 생각하겠습니다. |
| 61 | 61 | error code 02 번 : 입력한 변수는 숫자로 읽을 수 없습니다. 반점(,)을 입력했다면 반점을 지우고 다시 입력하세요. |
| 62 | 62 | |
| 63 | error code 03 번 : 0으로 나눌 수 없습니다.(아래쪽 참고) | |
| 64 | ||
| 63 | 65 | 덧셈과 뺄셈 계산과정을 적어봅니다. |
| 64 | 66 | {{{#!if (f=="+")||(f=="-") |
| 65 | 67 | |
| ... | ... | |
| 268 | 270 | {{{#!if bu[0]==45 |
| 269 | 271 | {{{#!if bu=bu.substr(1,bd-1) |
| 270 | 272 | }}}}}} |
| 271 | }}} | |
| 272 | 273 | |
| 273 | {{{#!if f=="*" | |
| 274 | 여기까지 a,b를 정리하고 곱셈 연산을 먼저 봅니다. | |
| 275 | 274 | a 또는 b값이 0이 되려면 au, ab 둘 다 0이 되거나 bu, bb 둘 다 0이 되어야 합니다. a 또는 b 값이 0일 경우 당연히 음수 부호가 표시되지 않습니다. |
| 276 | 275 | {{{#!if ((+au==0)&&(+ab==0))||((+bu==0)&&(+bb==0)) |
| 276 | 곱셈에서 0을 곱하면 0이 되므로, 곱셈의 경우 a 또는 b가 0이 될 때 계산 결과에 0을 반환합니다. | |
| 277 | {{{#!if f=="*" | |
| 277 | 278 | {{{#!if rs="", ru="0", rb="", ri="", rp=0, ns="" |
| 278 | 279 | }}}}}} |
| 279 | 곱셈에서 0을 곱하 | |
| 280 | 나눗셈에서 나누는 수(b)가 0이 될 경우 오류를 반환하고 ps=true를 걸어 나눗셈 연산이 되지 않게 만듭니다. | |
| 281 | {{{#!if f=="/" | |
| 282 | {{{#!if ((+bu==0)&&(+bb==0)) | |
| 283 | error code 03 번 : 0으로 나눌 수 없습니다. | |
| 284 | {{{#!if eb=03, ps=true | |
| 285 | }}}}}} | |
| 286 | 나누는 수가 0이 아니면서 나눌 대상이 0이 될 경우 곱셈에서 0을 곱하는 것처럼 계산 결과에 0을 반환합니다. | |
| 287 | {{{#!if ((+au==0)&&(+ab==0))&&((+bu!=0)||(+bb!=0)) | |
| 288 | {{{#!if rs="", ru="0", rb="", ri="", rp=0, ns="" | |
| 289 | }}}}}} | |
| 290 | }}} | |
| 291 | a와 b 모두 0이 아닌 경우를 봅니다. | |
| 280 | 292 | {{{#!if ((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0)) |
| 281 | 293 | |
| 282 | 294 | 18자리씩 곱셈계산을 할 수 있도록 입력했던 a와 b의 문자열을 확장할 것입니다. |
| ... | ... | |
| 298 | 310 | {{{#!if bb += "000000000000000000" |
| 299 | 311 | +18자}}}{{{#!if bb=bb.substr(0,18) |
| 300 | 312 | }}} |
| 313 | }}} | |
| 314 | 여기까지 곱셈 또는 나눗셈에서 숫자를 초기화하는 과정입니다. | |
| 315 | }}} | |
| 301 | 316 | |
| 317 | a와 b 모두 0이 아닌 경우에서 곱셈을 연산하는 과정입니다. | |
| 318 | {{{#!if (f=="*")&&((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0)) | |
| 302 | 319 | 곱셈은 18자리를 끊어서 계산합니다. 소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다. 소수점 위 19~36번째 자리는 rs로 두어 ri, rb, ru, rs 순으로 계산합니다. |
| 303 | 320 | |
| 304 | 321 | 앞으로 있을 계산은 다음과 같습니다. |
| ... | ... | |
| 1290 | 1307 | }}}{{{#!if tw=(+au.substr(0,i))*(+bu.substr(17-i,1)), rs=rs+tw, i+=1 |
| 1291 | 1308 | }}}{{{#!if tw=(+au.substr(0,i))*(+bu.substr(17-i,1)), rs=rs+tw, i+=1 |
| 1292 | 1309 | }}} |
| 1293 | 여기까지가 a*b | |
| 1310 | 여기까지가 곱셈에서 a*b 의 연산 과정이며 rb 정리 부분으로 넘어갑니다. | |
| 1294 | 1311 | }}} |
| 1295 | 여기까지가 곱셈의 연산 과정이며 rb 정리 부분으로 넘어갑니다. | |
| 1296 | }}} | |
| 1297 | 1312 | |
| 1298 | 1313 | ##ru 정리 부분 |
| 1299 | 1314 | 먼저 ru를 문자열로 변환합니다. 18자리씩 끊어 표기하므로 소수점 위 19~36번째 자리에 해당하는 rs값이 (곱한 값을 더했는데도) 0일 경우 rs를 빈 문자열로 바꿉니다. 곱셈과정에서 ru의 윗자리인 rs값이 0보다 클 경우, 1~18번째 자리인 ru에 빈 자리를 채우도록 ru의 왼쪽을 0으로 채웁니다. |
| ... | ... | |
| 1378 | 1393 | |
| 1379 | 1394 | rb 정리를 이것으로 종료합니다. |
| 1380 | 1395 | |
| 1381 | error code 03 번 : 0으로 나눌 수 없습니다. | |
| 1382 | ||
| 1383 | 1396 | 아래 출력 변수 설명 |
| 1384 | 1397 | '''sa''' : searching a; '''sb''' : searching b; '''sf''' : searching f; |
| 1385 | 1398 | '''rl''' : result string length to output; '''p''' : a point of string(s); |
| ... | ... |