当前位置:  开发笔记 > 编程语言 > 正文

如何避免大数字的科学记数法?

如何解决《如何避免大数字的科学记数法?》经验,为你挑选了3个好方法。

我正在做2 ^ 1000而且我得到了这个:

1.07151e + 301

有没有办法在不使用e + 301的情况下将其转换为正确的数字,或者至少有人可以通过某种方式使用e + 301部分向我显示如何将其转换为实数?



1> Louis Gerbar..:

可以在机器寄存器中直接操作的数量有多大的实际限制.如果使用双精度浮点数,则总共有64位,其中一些用于尾数,一些用于指数,一些用于符号位.

2 ^ 1000需要表示1001位整数而不会丢失精度.为了使用这样的数字,您需要使用具有大量支持的库,例如GNU MP.



2> tvanfosson..:

所以,我认为你真正想要的只是能够在没有科学记数的情况下打印它.如果你正在使用printf,你想要的是:

printf( "%f1000.0", value );
// note that 1000 is way larger than need be,
// I'm just too lazy to count the digits

cout,尝试类似的东西:

cout.setf(ios::fixed);
cout << setprecision(0) << value;

如果你想以2的幂(2 ^ 1000 vs 10715 ......)打印它,你就可以自己动手了.



3> Alnitak..:

您需要使用专门为长号设计的数字类.

要将2 ^ 1000表示为精确数,那么根据定义,您需要一个实际上包含1001个二进制位的数字格式.最长的正常原始整数格式通常只有64位.

BTW,答案是:

% perl -Mbigint -e 'print 2**1000'
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有