【发布时间】:2010-09-26 20:20:00
【问题描述】:
谁能给我一个 c 代码来划分 2 个 64 位数字。我的编译器只支持 32/32 除法。
感谢和问候
玛尼
【问题讨论】:
-
您在问题标题中的拼写错误让我认为您是在 64 位和 32 位之间做出“决定”,而不是在寻找“除法”算法。
谁能给我一个 c 代码来划分 2 个 64 位数字。我的编译器只支持 32/32 除法。
感谢和问候
玛尼
【问题讨论】:
在 Linux 内核中寻找其他地方:udivdi3.c
这应该准确地提供了 GCC 在遇到 64 位除法时使用的功能。
【讨论】:
除法限制很可能源于您正在为 32 位而不是 64 位进行编译。
我不记得看到处理 x86 的 64 位整数除法指令。它会将 2 个 32 位整数相乘,然后将结果拆分到 2 个寄存器中,但据我记得不是除法..
【讨论】:
divq。
更一般的想法是使用多精度库,例如GMP。
GMP 是用于任意精度算术的免费库,可对有符号整数、有理数和浮点数进行运算。除了运行 GMP 的机器中的可用内存所暗示的精度外,对精度没有实际限制。 GMP具有丰富的功能集,并且功能具有规则的接口。
浮点除法由void mpf_div (mpf_t rop, mpf_t op1, mpf_t op2)处理
【讨论】:
您确定您的编译器不支持 64 位除法吗?如果你的 C 编译器支持 C99,这应该可以工作:
#include <stdint.h>
#include <stdio.h>
int main(void)
{
int64_t numerator = 123;
int64_t denominator = 10;
int64_t quotient = numerator / denominator
printf("%" PRId64 " / %" PRId64 " = %" PRId64 "\n",
numerator, denominator, quotient);
return 0;
}
【讨论】:
该代码在 linux 中可用,请参阅div64.c。你能复制一下吗?
【讨论】: