r143 vs r144
......
676676
{{{#!if bb=bb+"0"
677677
}}}}}}
678678
679
변수 tw를 가져옵니다. (tv는 1로 초기화 된 채로 있습니다. 자릿수를 옮길수록 10씩 곱하게 됩니다.)
680
소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다.
679
변수 tw를 가져옵니다. (tv는 1로 초기화 된 채로 있습니다. 연산 과정 중간중간에 마지막 자릿수를 보정하고자 10씩 곱하게 됩니다.)
680
곱셈은 18자리를 끊어서 계산합니다. 소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다. 소수점 위 19~36번째 자리는 rs로 둡니다.
681681
ri에서 자릿수가 넘치면 넘친 만큼을 rb로 넘기고, rb에서 자릿수가 넘치면 넘친 만큼을 ru로 넘깁니다. ru에서 자릿수가 넘치면 rs로 넘깁니다.
682682
683683
○○○○○○○○○○○○○○○○○○□□□□□□□□□□□□□□□□□□.■■■■■■■■■■■■■■■■■■●●●●●●●●●●●●●●●●●●
......
719719
{{{#if ru=(+ru)+(+rb.substr(0,1)), rb=(+rb.substr(1,18))
720720
}}}}}}
721721
722
○○○○○○○○○○○○○○○○○○□□□□□□□□□□□□□□□□□■.■■■■■■■■■■■■■■■■■■●●●●●●●●●●●●●●●●●○
723
b의 소수점 아래 17번째와 곱합니다. 소수점 위 1번째, 소수점 아래 1~18번째, 소수점 아래 19~35번째에서 처리합니다. 문자열이 1칸 밀립니다.
724
{{{#!if tv=tv*10
725
}}}{{{#!if tw=ab.substr(1,17), tw=(+tw)*(+bb.substr(16,1)), tw=tw.toString()
726
}}}{{{#!if tw.length==19
727
{{{#if rb=(+rb)+(+tw.substr(0,1)), ri=(+ri)+((+tw.substr(1,18))*tv)
728
}}}}}}{{{#!if tw.length<=18
729
{{{#!if ri=(+ri)+((+tw)*tv)
730
}}}}}}{{{#!if ri=ri.toString(), ri.length==19
731
{{{#if rb=(+rb)+(+ri.substr(0,1)), ri=(+ri.substr(1,18))
732
}}}}}}{{{#!if tw=au.substr(1,17)+ab.substr(0,1), tw=(+tw)*(+bb.substr(16,1)), tw=tw.toString()
733
}}}{{{#!if tw.length==19
734
{{{#if ru=(+ru)+(+tw.substr(0,1)), rb=(+rb)+(+tw.substr(1,18))
735
}}}}}}{{{#!if tw.length<=18
736
{{{#!if rb=(+rb)
737
}}}}}}{{{#!if rb=rb.toString(), rb.length==19
738
{{{#if ru=(+ru)+(+rb.substr(0,1)), rb=(+rb.substr(1,18))
739
}}}}}}{{{#!if tw=au.substr(0,1), tw=(+tw)*(+bb.substr(16,1))
740
}}}{{{#!if ru=(+ru)+(+tw)
741
}}}
742
b의 소수점 아래 3번째 자리의 값과 곱하는 과정까지는 au 값이 19자리로 넘칠 일이 없습니다.
722743
723744
745
724746
여기까지가 a*b 계산과정입니다.
725747
}}}
726748
......