gpt4 book ai didi

c++ - 是否有一个库类来表示 float ?

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:44 25 4
gpt4 key购买 nike

我正在编写一个应用程序,它对十进制 数字(例如 57.65)进行大量操作。由于乘法和除法会迅速降低它们的准确性,我想将数字存储在一个类中,以在操作后保持其准确性,而不是依赖 float 和 double。

我说的是这样的:

class FloatingPointNumber {
private:
long m_mantissa;
int m_dps; // decimal points
// so for example 57.65 would be represented as m_mantissa=5765, m_dps=2
public:
// Overloaded function for addition
FloatingPointNumber operator+(FloatingPointNumber n);
// Other operator overloads follow
}

虽然我可以编写这样的类,但感觉有点像重新发明轮子,我确信某处一定有某个库类可以执行此操作(尽管这在 STL 中似乎不存在)。

有人知道这样的图书馆吗?非常感谢。

最佳答案

你的意思是这样的吗?

#include "ttmath/ttmath.h"
#include <iostream>

int main()
{
// bigdouble consists of 1024*4 bytes for the mantissa
// and 256*4 bytes for the exponent.
// This is because my machine is 32-bit!
typedef ttmath::Big<1024, 256> bigdouble; // <Mantissa, Exponent>

bigdouble x = 5.05544;
bigdouble y = "54145454.15484854120248541841854158417";
bigdouble z = x * y * 0.01;

std::cout << z;

return 0;
}

您可以根据需要在尾数指数中指定机器词的数量。我用过TTMath解决欧拉计划的难题,我真的很高兴。我觉得还是比较稳定的,有问题作者也很亲切。


EDIT:: 我也用过 MAPM在过去。它表示以 100 为基数 的大 float ,因此将十进制数转换为以 100 为基数不会有问题,这与以 2 为基数不同。TTMAT 使用以 2 为基数来表示大 float 。正如图书馆页面所声称的那样,它自 2000 年以来一直很稳定。正如您在图书馆页面中看到的那样,它已被用于许多应用程序。它是一个带有漂亮 C++ 包装器的 C 库。

MAPM nextPrime(){

static MAPM prime = 3;
MAPM retPrime = prime;

prime += 2;
while( isPrime( prime ) == false )
prime += 2;

return retPrime;
}

顺便说一句,如果您对 GMP 感兴趣并且正在使用 VS,那么您可以查看 MPIR这是 Windows 的 GMP 端口 ;) 对我来说,我发现 TTMath 比我尝试的所有方法都更令人愉悦,更容易/更快,因为该库在不接触堆的情况下进行堆栈分配。基本上它不是一个任意精度的库,您可以在编译时指定精度,如上所示。

关于c++ - 是否有一个库类来表示 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1268072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com