Richard Suchenwirth 2002-12-31 - Using plain strings of digits, unsigned integers of arbitrarily large size can be represented in Tcl. In
KISS I showed my versions of addition and multiplication; here now comes division (a big int divided by a regular int, may be 64 bits wide). The aim of such studies is of course factorisation of large integers...
proc bigint'div {dividend divisor} {#
set carry ""
set res ""
foreach digit [split $dividend ""] {
set carry [scan [append carry $digit] %d]
append res [expr {$carry / $divisor}]
set carry [expr {$carry % $divisor}]
}
list [string trimleft $res 0] $carry
}
proc bigint'hex bigint {
set res ""
while {$bigint != ""} {
foreach {bigint carry} [bigint'div $bigint 256] break
set res [format %02x $carry]$res
}
if {$res eq ""} {set res 00} else {set res}
}