主题:[讨论]任意多精度计算模块xp_module
weixing1531
[专家分:2580] 发布于 2008-04-26 17:40:00
今天在 www.fortran.com 这个网站找到一些很有用的模块
比如 xp_module 实现了任意多精度计算
如:
program test_xp
use xp_module
type(xp_real) :: x, y, z
call xp_set(100)
x = 1.0
y = 4.0
z = y * atan(x)
jform2 = 100
call xp_print(z)
end program test_xp
精确计算了pi的前100位
源程序见附件
回复列表 (共20个回复)
沙发
lishhit [专家分:2400] 发布于 2008-04-26 17:48:00
十分感谢!
板凳
jason388 [专家分:6150] 发布于 2008-04-26 20:02:00
非常感谢!在很多数值计算问题中需要超出编译器支持范围的更高精度。下载后慢慢研究。
3 楼
weixing1531 [专家分:2580] 发布于 2008-04-27 11:11:00
不得不承认,目前绝大多数模块都是老外写的
为国人颜汗!
此模块使有效数字位最多能达到1017位
重载了很多内部函数
4 楼
jren [专家分:40] 发布于 2008-04-29 11:30:00
计算1/3的值结果好象不对哎!! 各位可以试试.
program test_xp
use xp_module
type(xp_real) :: x, y, z
call xp_set(100)
x = 1.0
y = 3.0
z = x/y
jform2 = 100
call xp_print(z)
end program test_xp
z = 3.333333333333332888888888888888948148148148148140246913580246914633744855967078048834019204389593489E-1
5 楼
weixing1531 [专家分:2580] 发布于 2008-04-29 12:49:00
只精确了15位,是个问题,研究中
6 楼
jren [专家分:40] 发布于 2008-04-29 17:29:00
[em6] 1/30的计算结果是对的!!!
3.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333E-2
[em6][em6]
7 楼
weixing1531 [专家分:2580] 发布于 2008-04-29 20:36:00
[quote]计算1/3的值结果好象不对哎!! 各位可以试试.
program test_xp
use xp_module
type(xp_real) :: x, y, z
call xp_set(100)
x = 1.0
y = 3.0
z = x/y
jform2 = 100
call xp_print(z)
end program test_xp
z = 3.333333333333332888888888888888948148148148148140246913580246914633744855967078048834019204389593489E-1
[/quote]
程序写成这样就对了
program test_xp
use xp_module
type(xp_real) :: x, y, z
call xp_set(100)
x = 1
y = 3
z = x/y
jform2 = 100
call xp_print(z)
end program test_xp
看来还是整数比浮点数精确
8 楼
jren [专家分:40] 发布于 2008-04-30 08:00:00
[/quote]
程序写成这样就对了
program test_xp
use xp_module
type(xp_real) :: x, y, z
call xp_set(100)
x = 1
y = 3
z = x/y
jform2 = 100
call xp_print(z)
end program test_xp
看来还是整数比浮点数精确[/quote]
能解释一下原因吗?如果需要计算浮点数时该如何处理呢?谢谢
9 楼
mltx [专家分:20880] 发布于 2008-04-30 09:35:00
最一致的方法是:
x = 1.0_xp_real
y = 3.0_xp_real
10 楼
jren [专家分:40] 发布于 2008-04-30 10:22:00
[quote]最一致的方法是:
x = 1.0_xp_real
y = 3.0_xp_real
[/quote]
mltx 能说说在xp_module.f90中xp_real的值是什么吗?
谢谢!
我来回复