标签: multiprecision

存储和打印大于2 ^ 64的整数值

我正在尝试编写一个程序来查找mersenne素数.使用无符号长long类型,我能够确定第9个mersenne prime的值,即(2 ^ 61)-1.对于较大的值,我需要一种可以存储大于2 ^ 64的整数值的数据类型.请帮忙.(我应该能够使用这种数据类型的运算符,如, =,>,<和%.)

c types multiprecision

9
推荐指数
3
解决办法
7805
查看次数

计算64位乘128位乘积的低128位需要多少64位乘法?

考虑您要计算64位和128位无符号数乘以结果的低128位,并且您可用的最大乘法是C类64位乘法,它需要两个64位无符号输入并返回结果的低64位.

需要多少次乘法?

当然你可以用8来做:将所有输入分解为32位块并使用64位乘法来进行4*2 = 8所需的全宽32*32-> 64乘法,但是可以做得更好?

当然,算法应该在乘法之上仅进行"合理"数量的加法或其他基本算术(我对重新发明乘法作为加法循环并因此声称"零"乘法的解决方案不感兴趣).

c multiplication multiprecision

8
推荐指数
1
解决办法
223
查看次数

使用boost lib(高于16位)的更高精度浮点数

我正在运行物理实验的模拟,所以我需要非常高的浮点精度(超过16位).我使用Boost.Multiprecision,但无论我怎么做,我都无法获得高于16位的精度.我使用C++和eclipse编译器运行模拟,例如:

#include <boost/math/constants/constants.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>
#include <limits>

using boost::multiprecision::cpp_dec_float_50;

void main()
{
    cpp_dec_float_50 my_num= cpp_dec_float_50(0.123456789123456789123456789);
    std::cout.precision(std::numeric_limits<cpp_dec_float_50>::digits10);
    std::cout << my_num << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0.12345678912345678379658409085095627233386039733887
                   ^
Run Code Online (Sandbox Code Playgroud)

但它应该是:

0.123456789123456789123456789
Run Code Online (Sandbox Code Playgroud)

如您所见,在16位数之后它是不正确的.为什么?

c++ precision boost multiprecision

6
推荐指数
1
解决办法
991
查看次数

两个字符串之间的数学运算

我正在尝试使用巨大的小数C++添加减法和乘法数字.

例:

4125487821547.87879845215584844588 - 354556689.899455132265468

到目前为止我想到的是我需要将输入保存为字符串,但不确定如何继续.

提前感谢您的帮助谢谢

c++ multiprecision

5
推荐指数
1
解决办法
389
查看次数

是否可以在一个long int变量中存储2个32位值?

我想在一个long int变量中存储两个32位值.

你会如何在使用C的32位操作系统上执行此操作?是否可以将数据存储在一个长long变量中?如果是这样,那怎么办?

c long-integer multiprecision

4
推荐指数
1
解决办法
5006
查看次数

如何将boost :: multiprecision :: cpp_int转换为cpp_dec_float <0>(而不是cpp_dec_float_50等)?

正如Boost Multiprecision库文档中所明确的那样,将a从a转换为a是很简单boost::multiprecision::cpp_intboost::multiprecision::cpp_dec_float:

// Some interconversions between number types are completely generic,
// and are always available, albeit the conversions are always explicit:

cpp_int cppi(2);
cpp_dec_float_50 df(cppi);    // OK, int to float // <-- But fails with cpp_dec_float<0>!
Run Code Online (Sandbox Code Playgroud)

从a转换cpp_int为固定宽度浮点类型(即a cpp_dec_float_50)的能力给出了一种希望,即可以在库中从a转换cpp_int任意宽度的浮点类型 - 即a cpp_dec_float<0>.但是,这不起作用; 我在Visual Studio 2013中转换失败,如下面的简单示例程序演示:

#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>

int main()
{
    boost::multiprecision::cpp_int n{ 0 };
    boost::multiprecision::cpp_dec_float<0> f{ n }; // Compile error in …
Run Code Online (Sandbox Code Playgroud)

c++ boost c++11 multiprecision

4
推荐指数
1
解决办法
3033
查看次数

C++:将"boost :: multiprecision :: float128"转换为"double"

我正在使用boost multiprecision库,更确切地说是boost :: multiprecision :: float128类型.使用ICPC进行编译,在尝试执行以下操作时遇到一些错误:

double a = functionA();
Run Code Online (Sandbox Code Playgroud)

其中functionA()返回一个boost :: multiprecision :: float128变量.

error: no suitable conversion function from "boost::multiprecision::float128" to "double" exists|
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

c++ boost floating-point-precision multiprecision

4
推荐指数
1
解决办法
1848
查看次数

MySQL中的精确十进制除法

如何DECIMAL在MySQL中正确划分两个值并获得精确到列类型中定义的位数的结果?

例:

select cast(1/2 as decimal(4,4)),
cast(1 as decimal(4,4))/2,
cast(1 as decimal(4,4))/cast(2 as decimal(4,4));
Run Code Online (Sandbox Code Playgroud)

结果:

'0.5000', '0.49995000', '1.00000000'
Run Code Online (Sandbox Code Playgroud)

为什么第二个结果是否真空?为什么第三个结果不是"0.5000"?

注意:我不能只使用第一个表单,我需要使用存储为小数的列执行计算.

mysql casting division multiprecision

4
推荐指数
1
解决办法
5235
查看次数

如何在 Boost::multiprecision 中使用 sqrt 和 ceil?

您知道如何使用 Boost::multiprecison 执行这行简单的代码而不会出错吗?

boost::multiprecision::cpp_int v, uMax, candidate;
//...
v += 6 * ceil((sqrt(uMax * uMax - candidate) - v) / 6);
Run Code Online (Sandbox Code Playgroud)

使用 MSVC 时,"sqrt" 会出现错误,可以通过以下方式修复它:

v += 6 * ceil((sqrt(static_cast<boost::multiprecision::cpp_int>(uMax * uMax - candidate)) - v) / 6);
Run Code Online (Sandbox Code Playgroud)

然后“ceil”出现错误,可以通过以下方式修复它:

namespace bmp = boost::multiprecision;
typedef bmp::number<bmp::cpp_dec_float<0>> float_bmp;
v += 6 * ceil(static_cast<float_bmp>((sqrt(static_cast<bmp::cpp_int>(uMax * uMax - candidate)) - v) / 6));
Run Code Online (Sandbox Code Playgroud)

那么就出现了“通用互变”的错误!?!

我认为应该有一种更优雅的方式来实现如此简单的代码行,不是吗?如果您对此有一些想法,请告诉我。

问候。

c++ boost sqrt ceil multiprecision

4
推荐指数
1
解决办法
2668
查看次数