提问人:Parth 提问时间:11/14/2023 最后编辑:relent95Parth 更新时间:11/14/2023 访问量:106
如何在 Swift 中对大数进行模块化算术?
How to do modular arithmetics on big numbers in Swift?
问:
当通过减去字符的旧权重并为新字符添加新权重来评估字符串的滚动哈希时,会出现这种情况。
Python 有无限长的数字,能够存储如此大的数字:
num = -56061846576641933068511861128435847024473459936647893758520084401988341
div = 10**9 + 7
mod = num % div #504892002
但是在 Swift 中,当我不断进行计算时,我失去了精度,误差越来越大。例如,在我的计算中的某个时刻,上面的数字具有以下值:
var num = Double("-5.606184657664193e+70")
var div = pow(Double(10), 9) + 7
var mod = num!.truncatingRemainder(dividingBy: div)
mod = mod < 0 ? mod + div : mod //215272131.0
我研究了 Decimal,但它不支持 mod 操作。而 Int64 对于这样的数字来说也太小了。在不添加便利扩展的情况下,是否有其他本机选项?
另外,如何使用 NSDecimalNumber 获得除法的整数和模数 (mod) 也无济于事。它建议扩展或具有不处理大数字的示例。
答: 暂无答案
评论
pow(base, len - 1) mod div