首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c/c++中得到大数的精确二进制表示?

如何在c/c++中得到大数的精确二进制表示?
EN

Stack Overflow用户
提问于 2017-11-29 14:38:50
回答 1查看 774关注 0票数 1

我试图在C/C++和Java中将大数转换为二进制,但是如果我使用简单的十进制输入,比如998446744073709551615输出是正确的,但是如果我使用科学表示法(例如:1.7334e+32 ),那么二进制表示就会出错。

我用C/C++和Java测试了double和BigDecimals的二进制代码。

字符串在C/C++测试中的长双: https://ideone.com/EeOyNP

Java中的字符串到大十进制: https://ideone.com/OAvx7q

问题是用比64 bits更多的数字来表示,而不是用科学的符号来表示。

请查看下面的输出。

C/C++代码的输出:

输入= 998446744073709551615预期二进制= 1101100010000000111011011001111011110011001010110011111111111111111111 输出:成功解析斯特朗(C-样式):9.98447e+20二进制: 1101100010000000111011011001111011110011001010110100000000000000000000 解析字符串流( 1101100010000000111011011001111011110011001010110100000000000000000000样式):9.98447e+20二进制文件:9.98447e+20 showBitDiff统计数据:总计70位49位匹配21位不匹配

代码的输出:

十进制字符串部分: decimalString : 998446744073709551615科学符号: 9.984467440737096E20 十进制-字符串基信息: 二进制: 1101100010000000111011011001111011110011001010110011111111111111111111十进制: 998446744073709551615六角:0x36203B67BCCACFFFF位长: 70 指数字符串部分: exponentString : 9.984467440737096E20 指数字符串基信息: 二进制: 1101100010000000111011011001111011110011001010110100001011110100000000十进制: 998446744073709600000六角: 0x36203B67BCCAD0BD00位长: 70 两个BigInts都不是相等的

如何解决这个问题,在C/C++中正确表示大数?我不想要java中的解决方案,我只是为了测试目的而使用java,因为它有非常大的任意数字的bigDecimal类,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-29 15:09:47

如果你首先转换成双数表示你的十进制指数表示,那当然是错误的。看看arithmetic。如果有比状态(2^128)更多的数字,那么就会有空白。这就是从一开始就为之设计的。如果需要准确表示实际数字,请不要将其转换为浮点表示形式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47555327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档