0

以下几行是我真正“无用”的 C++ 程序的一部分......由于“unsigned long long”的长度,它计算 2 的幂仅高达 2^63 而不是 2^128 “正在被询问”建议用于 15 位精度的数字的变量...!!!

就是这样......我需要一个 16 字节或更多的变量......这不是由以下人员提供的:

-__int128(Visual Studio 2010 将字母变为蓝色,但出现红线和调试错误:“此架构不支持关键字”32 位系统)

-Boost::Projects ...在我用谷歌搜索它之后,因为我是一个新人,当我遇到专业网站时“我迷失在宇宙中”(boost::bigint ...存在吗???不一个反问句)

(-当然要多打字)

int main()
{   
    unsigned long long result;
    int i;
    const int max=128;

    for(i=0, result=1ll; i <= max; ++i,result *=2 )
        cout<<setw(3)<< i <<setw(32)<< result <<endl;

    system("pause");
    return 0;
}
4

3 回答 3

1

您可以在 C++ 中找到实现operator<<()输出到 ostream 的“bigint”实现,但如果您只想将 2 的幂打印到控制台或文本字符串,并且您不需要实际执行“bigint”数学(除了计算那些 2 的幂),有一种更简单的方法可以让您将 2 的幂变为您想要的任意大小,并有耐心仔细查看:

将每个十进制数字(数字 0 到 9)存储为单独的实体,可能作为字符或整数数组或数字的 std::list 中。使用 std::list 的优点是,随着数字变大,您可以轻松地在前面添加新的数字位置,但是您可以通过将数字以相反的顺序存储在 std::vector 中来轻松地做到这一点(当然要打印它们,您必须从后到前迭代以按正确的顺序打印数字)。

一旦你弄清楚你想如何存储数字,你的数字加倍算法如下:迭代大数的数字,将每个数字加倍(当然是 mod 10)并携带任何溢出(即表示如果它的结果……在%10……大于 9) 从那个数字到下一个数字之前。在下一个数字上,先将其加倍,然后如果前一个数字溢出,则加 1。如果该结果溢出,则将该溢出继续到下一个数字并继续到所有数字的末尾。在数字的末尾,如果将最后一个数字加倍并从前一个数字添加任何溢出导致最后一个数字溢出,则添加一个新数字并将其设置为 1。然后打印生成的数字列表。

使用此算法,您可以打印任意大的 2 次幂。当然,它们不是“数字”,因为您不能直接在 C++ 数学运算中使用它们。

于 2013-05-10T22:47:11.577 回答
1

给定现代 CPU,SSE 和 AVX 内在函数高达 256 字节。它们被命名为__m128i__m256i

于 2013-05-10T22:32:28.010 回答
0

128 位整数是一个非常大的整数。您应该实现自己的数据类型。您可以创建一个 s 数组,short在其中存储数字(数字)并实现乘法,就像您在数学笔记本中所做的那样,这可能是最简单的方法。

在此处输入图像描述

当然,这还没有完成!'2' 仍然不见了;)

于 2013-05-10T22:26:39.787 回答