r154 vs r155
......
498498
{{{#if rs=(+rs)+(+ru.substr(0,1)), ru=(+ru.substr(1,18))
499499
}}}}}}
500500
501
소수점 아래 1~18번째에서 au를 곱한 값을 처리합니다.
502
{{{#!if tw=au.substr(0,18), tw=(+tw)*(+bb.substr(17,1)), tw=tw.toString()
503
}}}
504
18자리에서 넘쳐 19자리가 되면 넘친 앞의 1자리를 ru로 넘기고 나머지 18자리를 rb에 더합니다.
505
{{{#!if tw.length==19
506
{{{#if ru=(+ru)+(+tw.substr(0,1)), rb=(+rb)+(+tw.substr(1,18))
507
}}}}}}{{{#!if tw.length<=18
508
{{{#!if rb=(+rb)+(+tw)
509
}}}}}}{{{#!if rb=rb.toString(), rb.length==19
510
{{{#if ru=(+ru)+(+rb.substr(0,1)), rb=(+rb.substr(1,18))
511
}}}}}}
512501
513
b의 소수점 아래 17번째와 곱합니다. 소수점 위 1번째, 소수점 아래 1~18번째, 소수점 아래 19~35번째에서 처리합니다. 문자열이 1칸 밀립니다. 19~35번째 자리는 17자리이므로 17자리 숫자가 곱셈으로 18자리로 넘치게 되면 앞의 자리를 rb로 넘깁니다.
514
{{{#!if tv=tv*10
515
}}}{{{#!if tw=ab.substr(1,17), tw=(+tw)*(+bb.substr(16,1)), tw=tw.toString()
516
}}}{{{#!if tw.length==18
517
{{{#if rb=(+rb)+(+tw.substr(0,1)), ri=(+ri)+((+tw.substr(1,18))*tv)
518
}}}}}}{{{#!if tw.length<=17
519
{{{#!if ri=(+ri)+((+tw)*tv)
520
}}}}}}{{{#!if ri=ri.toString(), ri.length==19
521
{{{#if rb=(+rb)+(+ri.substr(0,1)), ri=(+ri.substr(1,18))
522
}}}}}}{{{#!if tw=au.substr(1,17)+ab.substr(0,1), tw=(+tw)*(+bb.substr(16,1)), tw=tw.toString()
523
}}}{{{#!if tw.length==19
524
{{{#if ru=(+ru)+(+tw.substr(0,1)), rb=(+rb)+(+tw.substr(1,18))
525
}}}}}}{{{#!if tw.length<=18
526
{{{#!if rb=(+rb)
527
}}}}}}{{{#!if rb=rb.toString(), rb.length==19
528
{{{#if ru=(+ru)+(+rb.substr(0,1)), rb=(+rb.substr(1,18))
529
}}}}}}{{{#!if tw=au.substr(0,1), tw=(+tw)*(+bb.substr(16,1))
530
}}}{{{#!if ru=(+ru)+(+tw)
531
}}}
532
b의 소수점 아래 3번째 자리의 값과 곱하는 과정까지는 au 값이 19자리로 넘칠 일이 없습니다.
533
534
b의 소수점 아래 16번째와 곱합니다. 소수점 위 1~2번째, 소수점 아래 1~18번째, 소수점 아래 19~34번째에서 처리합니다. 문자열이 1칸 또 밀립니다.
535
{{{#!if tv=tv*10
536
}}}{{{#!if tw=ab.substr(2,16), tw=(+tw)*(+bb.substr(15,1)), tw=tw.toString()
537
}}}{{{#!if tw.length==17
538
{{{#if rb=(+rb)+(+tw.substr(0,1)), ri=(+ri)+((+tw.substr(1,18))*tv)
539
}}}}}}{{{#!if tw.length<=16
540
{{{#!if ri=(+ri)+((+tw)*tv)
541
}}}}}}{{{#!if ri=ri.toString(), ri.length==19
542
{{{#if rb=(+rb)+(+ri.substr(0,1)), ri=(+ri.substr(1,18))
543
}}}}}}{{{#!if tw=au.substr(2,16)+ab.substr(0,2), tw=(+tw)*(+bb.substr(15,1)), tw=tw.toString()
544
}}}{{{#!if tw.length==19
545
{{{#if ru=(+ru)+(+tw.substr(0,1)), rb=(+rb)+(+tw.substr(1,18))
546
}}}}}}{{{#!if tw.length<=18
547
{{{#!if rb=(+rb)
548
}}}}}}{{{#!if rb=rb.toString(), rb.length==19
549
{{{#if ru=(+ru)+(+rb.substr(0,2)), rb=(+rb.substr(1,18))
550
}}}}}}{{{#!if tw=au.substr(0,1), tw=(+tw)*(+bb.substr(15,1))
551
}}}{{{#!if ru=(+ru)+(+tw)
552
}}}
553
554
555502
여기까지가 a*b 계산과정입니다.
556503
}}}
557504
......