我试图在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类,谢谢。
发布于 2017-11-29 15:09:47
如果你首先转换成双数表示你的十进制指数表示,那当然是错误的。看看arithmetic。如果有比状态(2^128)更多的数字,那么就会有空白。这就是从一开始就为之设计的。如果需要准确表示实际数字,请不要将其转换为浮点表示形式。
https://stackoverflow.com/questions/47555327
复制相似问题