读书人

请教:哪一位大侠有在32位机器上实现64

发布时间: 2012-02-23 22:01:34 作者: rapoo

请问:哪一位大侠有在32位机器上实现64位除法的程序呀 C码的.
请问:哪一位大侠有在32位机器上实现64为除法的程序呀

{
unsigned int hight;
unsigned int low;
}

如果可以给出小数的前2位最好,如果没有就算了 我再自己想办法,
我就100分,倾力奉献.

[解决办法]
数据结构与算法的书上有这样类型的算法,用分部除法。自己耐心写吧,很简单的。
[解决办法]
可以学习一下任意精度算法,不只64位
[解决办法]
32位机器上也有64位的整数和浮点数。
[解决办法]
c interface and implement
[解决办法]
double

_int64
[解决办法]
直接用__int64 a, b, c;声明变量,使用c = a / b;即可,但是仅整除,没有小数点。
[解决办法]
以前做rsa的时候用的一个函数:

// 计算(u*v)%m

unsigned mul_mod(unsigned u, unsigned v, unsigned z)
{
// 如果u*v没有溢出, 则直接计算

if((u*v)/u == v) return (u*v)%z;

// 进行长乘法(结果为64位)

unsigned u0, v0, w0;
unsigned u1, v1, w1, w2, t;

u0 = u & 0xFFFF; u1 = u > > 16;
v0 = v & 0xFFFF; v1 = v > > 16;
w0 = u0*v0;
t = u1*v0 + (w0 > > 16);
w1 = t & 0xFFFF;
w2 = t > > 16;
w1 = u0*v1 + w1;

// x为高32位, y为低32位

unsigned x = u1*v1 + w2 + (w1 > > 16);
unsigned y = u*v;

// 进行长除法(被除数为64位)

for (int i = 1; i <= 32; i++)
{
t = (int)x > > 31; // All 1 's if x(31) = 1.

x = (x < < 1) | (y > > 31); // Shift x || y left
y < <= 1; // one bit.

if((x|t) > = z) { x -= z; y++; }
}

return x; // y为商, x为余数
}
[解决办法]
MARK了!
[解决办法]
typedef signed __int64 INT64, *PINT64;

Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。

Int64 为比较此类型的实例、将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

但,在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 Int64 字段,则该字段的最终值是无法预测的。
有关格式规范代码如何控制值类型的字符串表示形式的信息,请参见格式化概述。此类型实现接口 IComparable、IFormattable 和 IConvertible。使用 Convert 类进行转换,而不是使用此类型的 IConvertible 显式接口成员实现。

楼主怎么遇到这个问题的,具体什么环境?

[解决办法]
mark
[解决办法]
32位x86 cpu直接支持64位除法,用汇编很少的几行指令
[解决办法]

[解决办法]
奇怪了,double为什么不用呢?
[解决办法]
顶楼上的 double

读书人网 >C语言

热点推荐