【发布时间】:2018-11-05 14:12:19
【问题描述】:
我想计算“两个 64 位无符号整数相乘”除以 2^64 的商。
有人说 128bit 整数可以使用,但在某些编程语言或某些平台(如 Visual Studio C++)中不支持内置 128bit 整数。
但我们不想使用除法,因为除法需要太多时间。我认为可以通过加减法、乘法和按位运算(如位移)来完成。
【问题讨论】:
-
您可以使用
double来进行 2^64 的乘除。由于结果将是 uint64_t。 -
@kiner_shah 不,双精度只有 53 位,其他 11 位用于指数。存在精度问题。
-
我试过了,它看起来可以工作:Link。但是,您是对的,
double有 53 位尾数(IEEE 754)。 -
@kiner_shah 实际上它有一些错误 - ideone.com/xG75bR
-
stackoverflow.com/q/28868367/1918193 例如,其中包含更多链接。 docs.microsoft.com/en-us/cpp/intrinsics/umulh 用于 Visual Studio x64 版本。
标签: c++ bit-manipulation 64-bit multiplication 128-bit