int128

xiaolizi 2006-08-15 10:23:04

哪位高人能够给出一个int128的实现类或者给个连接地址也可以。
先鞠躬三下~~~
...全文
508 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhu_doc 2006-08-15
  • 打赏
  • 举报
回复
用成熟的大整数运算库,也可以解决问题。

用asm也可以相对简单实现!
chenhu_doc 2006-08-15
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads2/sourcecode/windows/other/detail4334.html
deppew123 2006-08-15
  • 打赏
  • 举报
回复
不告诉你,光接受鞠躬
Dong 2006-08-15
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4928/4928409.xml?temp=.7046015
healer_kx 2006-08-15
  • 打赏
  • 举报
回复
我来接受鞠躬了,吃完饭帮你找找。
netxuning 2006-08-15
  • 打赏
  • 举报
回复
mark
xiaolizi 2006-08-15
  • 打赏
  • 举报
回复
bluesuncom(突然空闲)
好思路~~~ :)

加减没什么问题了,乘法怎么弄,谁能够给点提示啊~~~
bluesuncom 2006-08-15
  • 打赏
  • 举报
回复
判断加法低位越界的问题,说个思路:比如A+B,两个都是__int64,用__int64的最大值减去其中的一个值A,得到结果C,然后把C和B进行比较,如果B>C,那么结果就会越界。
xiaolizi 2006-08-15
  • 打赏
  • 举报
回复
To jixingzhong:
"如果能表示的数据极限就是 __int64,
那么就不能用 __int64 来合成 __int128 ..."
兄弟这个话就不能理解啦。在32位的OS上,数据极限是32位(DWORD),但还是可以通过
LONGLONG(__int64)来表示超过32位的数据,所以为什么不能用2个__int64来表示int128呢
  还是要谢谢兄弟给出的连接啊 :)

To gxqcn
正和我意 :)
gxqcn 2006-08-15
  • 打赏
  • 举报
回复
恕我直言:上述链接均没有什么技术含量,因为可优化的地方太多太多。。。
但若不讲究或苛求时间空间复杂度,仅仅是实现的话,还是可以参考一下的。
OOPhaisky 2006-08-15
  • 打赏
  • 举报
回复
mark
jixingzhong 2006-08-15
  • 打赏
  • 举报
回复
http://www.programfan.com/club/bbsall.asp?action=best&page=10
链接中有 5 个这个大数类实现 的帖子:

[原创]用高精度实现整数+—×/,并计算catalan数和大组合数1
http://www.programfan.com/club/showbbs.asp?id=77885

其他几个就不列举出来了 ...
jixingzhong 2006-08-15
  • 打赏
  • 举报
回复
大数运算全部源代码 :
http://www.cppblog.com/xuchaoyi99/archive/2005/12/04/1530.aspx
jixingzhong 2006-08-15
  • 打赏
  • 举报
回复
如果能表示的数据极限就是 __int64,
那么就不能用 __int64 来合成 __int128 ...
iunion 2006-08-15
  • 打赏
  • 举报
回复
樓上正解!!
gxqcn 2006-08-15
  • 打赏
  • 举报
回复
如果是在 32bits OS 下,用 DWORD 比较高效;
如果是在 64bits OS 下,可以考虑用int64;

lz 现碰到的问题是“+”低位越界溢出判断问题。

1、用汇编,溢出时有标志位可读取;
2、用如下代码即可:
unsigned __int64 A = (unsigned __int64)src1 + (unsigned __int64)src2;
if ( A < (unsigned __int64)src1 ) high++;
xiaolizi 2006-08-15
  • 打赏
  • 举报
回复
UPCC(杂食动物) 兄 给的连接太复杂,基本上看不懂~~~:)
chenhu_doc((Plan equals power! )) 兄 给的连接比较接近我心中所想 :)
不过是用4个DWORD值来实现的,我想用两个int64来实现,感觉应该更简单些。如下:

int128
{
public:
unsigned __int64 low;
__int64 high;
};

不过问题出来了,在做简单的+法时候,怎么判断低位越界溢出呢?
如果用DWORD的话,可以类似
unsigned __int64 A = (unsigned __int64)src1 + (unsigned __int64)src2;
if(A > 0xffffffff) high++;
但子项就是 __int64了,该如何判断。。。

在线等待中。。。期待传说中的高手出现。。。

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧