标准C++忠高精度浮点运算如何进行?是否有相关的类库?

Againstwind 2005-08-06 03:50:52
现在需要进行大数据高精度的浮点数计算(小数点前11位,小数点后6位),是用一般的double型进行计算容易发生小数点后的数值漂移的问题!
请问各位大虾是否有什麽办法或者相关的类库?开源的、商业的类库均可!!!
多谢指教!
...全文
1547 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
randyzhu 2005-12-03
  • 打赏
  • 举报
回复
关注
  • 打赏
  • 举报
回复
C++ 就用 cryptlib , C 就用 openssl.
fiftymetre 2005-11-03
  • 打赏
  • 举报
回复
long double也不是很精的

回复人: goodluckyxl(被人遗忘的狗<写驱动不是我强项,但我可以做好>) ( ) 信誉:142 2005-11-03 09:51:00 得分: 0


是基本类型没有什么标准库的
高精度的数据运算要精确到10-N次方
还是用char数组来存储整数部分和小数部分
按BCD格式来运算也方便


同意狗狗的关点
goodluckyxl 2005-11-03
  • 打赏
  • 举报
回复
是基本类型没有什么标准库的
高精度的数据运算要精确到10-N次方
还是用char数组来存储整数部分和小数部分
按BCD格式来运算也方便
gxqcn 2005-11-03
  • 打赏
  • 举报
回复
看来还是需要“精确”的,那么下面的算法库一定可以满足:

HugeCalc 超大整数完全精度快速计算器/算法库 V5.1.0.1

HugeCalc 是一款高精度算法库(同时包含 MBCS + UNICODE 版),适合于大规模科学计算,尤其适用于数论、密码学等领域研究,其核心算法耗费作者十余年的心血。具有占用资源少、效率高、使用便捷、易二次开发、可移植性强、可扩展性好等特点。关键文件 HugeCalc.dll 虽然很小,却提供了 428 个功能接口,且其计算速度完全可与大型专业数学工具软件媲美!其最核心的算法现已优于当前的 apfloat、Mathematica、Maple,甚至 GMP!

HugeCalc 现有公共接口 428 个,提供了如下功能:
⊙ 高精度快速加法
⊙ 高精度快速减法
⊙ 高精度快速乘法
⊙ 高精度快速除法
⊙ 高精度快速同余
⊙ 高精度快速位运算
⊙ 高精度快速乘方
⊙ 高精度快速开方
⊙ 超大整数快速取对数
⊙ 高精度快速求排列
⊙ 高精度快速求组合
⊙ 高精度快速阶乘、双阶乘
⊙ 高精度快速计算 Fibonacci 数列
⊙ 高精度快速乘积取模
⊙ 高精度快速数论倒数取模运算
⊙ 高精度快速乘方取模(支持负指数)
⊙ 高精度快速求最大公约数(支持群组运算)
⊙ 高精度快速计算扩展最大公约数
⊙ 高精度快速求最小公倍数(支持群组运算)
⊙ 高精度快速“等幂和”(支持群组运算)
⊙ 高精度快速任意进制转换
⊙ 自由指定有效位运算
⊙ 强大而灵活的输出
⊙ 高精度计时器(有暂停、累计、复位等功能)


为了与广大网友分享 HugeCalc 带来的便捷,该版公开了 HugeCalc.dll 的所有接口文件(同时包含 MBCS + UNICODE 版),大家可以更自由地进行高精度计算或自开发,而无须再依赖于 Mathematica 等大型软件。

相对于前一版,V5.1.0.1不仅仅新增了许多公共函数,还优化了很多核心算法;并放宽了对未注册用户的使用限制,提供多种模式以供未注册用户进行试用和评估。

下载链接:http://maths.myrice.com/software.htm#02
gxqcn 2005-11-03
  • 打赏
  • 举报
回复
回复人: Againstwind(逆风飞扬) ( ) 信誉:100 2005-8-9 21:07:50 得分: 0

fangrk(加把油,伙计!)
可是我要进行这种高精度数据的加、乘、除运算,你这样可以表示,可是计算怎麽办?
还请指教!

多谢各位的帮忙!!!

试试这个吧,绝对不会失望:http://maths.myrice.com/software.htm#02
newbiestar 2005-11-03
  • 打赏
  • 举报
回复
回复人: fiftymetre(“天使”因为有一张干净的脸,却常做肮脏的事。) ( ) 信誉:100 2005-11-03 10:12:00 得分: 0


long double也不是很精的

回复人: goodluckyxl(被人遗忘的狗<写驱动不是我强项,但我可以做好>) ( ) 信誉:142 2005-11-03 09:51:00 得分: 0


是基本类型没有什么标准库的
高精度的数据运算要精确到10-N次方
还是用char数组来存储整数部分和小数部分
按BCD格式来运算也方便


同意狗狗的关点

=========================================
不是long double不精,而是浮点这种方法不精确,从原理知道就不可能精确的东西,就算再怎么修改也不可能精确的。
cluber2001 2005-11-03
  • 打赏
  • 举报
回复
应该用字符数组来表示。
Againstwind 2005-08-21
  • 打赏
  • 举报
回复
fansy007(范特西)
java的big decimal当小数位数比较多的时候,经过大量计算也有可能出现消暑漂移的问题,所以也要借助一些计算函数库的。
你有办法吗?请多提建议!
fansy007 2005-08-16
  • 打赏
  • 举报
回复
java有big decimal
c++么......,标准库里肯定没的:(
Againstwind 2005-08-15
  • 打赏
  • 举报
回复
有人知道吗?
请帮忙!!!
Againstwind 2005-08-09
  • 打赏
  • 举报
回复
另外,还是想请教一下!
是否有这样的运算库??
Againstwind 2005-08-09
  • 打赏
  • 举报
回复
fangrk(加把油,伙计!)
可是我要进行这种高精度数据的加、乘、除运算,你这样可以表示,可是计算怎麽办?
还请指教!

多谢各位的帮忙!!!
我啃 2005-08-08
  • 打赏
  • 举报
回复
如果处理的是大数例如:46446464641313131313134313743…………几千到几万位的可以用RSA加密算法中用到的大数库,如果是小型浮点数可以用多个double变量来存不同区域的数据,如果是大型浮点数那只能自己做一个char的class了
fatacy 2005-08-07
  • 打赏
  • 举报
回复
mark
killer1984 2005-08-07
  • 打赏
  • 举报
回复
据我所知,在高精度情况下都是转化成整型来运算的,然后再按精度要求还原为浮点。
因为整型表示范围可以无限扩大(使用自定义整型),而且在计算中需要浮点的时候都可以乘十转换为整型,再记录下乘的次数以备还原,所以基本上可以满足任何精度要求。
根据你的精度要求,大概只需要long或long long就行了(具体用哪个要实验),这样只需要对重写几个会产生小数位的运算就行了。
Jagen在路上 2005-08-06
  • 打赏
  • 举报
回复
一般要求高精度的,需要采用任意精度计算法。它实际上是要使用字符串来完全模拟常规计算问题的迭代。还有就是对于浮点数,可以先将参与计算的各个元素,乘以一个较大的数位,比如10000000,计算完后再进行除。如采取后一方法,为了保证很高的精度,这个乘数可以采用很大,但是需要使用若干个unsigned int型变量进行存储。如果你学过汇编语言,你会了解,在16位处理器下,计算32位数的加减法会采用两个寄存器,同时伴有用于进位处理的指令。
chengshiq 2005-08-06
  • 打赏
  • 举报
回复
楼上的厉害
PMsg 2005-08-06
  • 打赏
  • 举报
回复
高精度和高位数的 用字符来处理比较好~
fangrk 2005-08-06
  • 打赏
  • 举报
回复
我觉得可以把你要的数值用两个double来表示,一个表示整数部分,一个表示小数部分。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double v1=123456789123456789;
double v2=0.123456789123123456789123;
cout.precision(30);
cout.setf(ios_base::fixed,ios_base::floatfield);
cout<<v1<<'\n'<<v2;
}
/*
123456789123456780.000000000000000000000000000000
0.123456789123123450000000000000
你的位数应该够了吧?
*/
加载更多回复(2)

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧