program arbitrary_precision
use fmzm
implicit none
type(IM) :: m !定义一个任意精度的整型
type(FM) :: t1, t2, pi !定义任意精度的实型
integer (kind=4) :: i, n
character(500) :: r !定义一个长度为500的字符串
print *, "Input n="
read (*,*) n
m = 1 !初始赋值
do i = 1, n
m = m * i
end do
call im_form('i500', m, r) !截取任意精度整型变量的500位精度,并转化成字符串
write(*,'(2/,I3,A,G0)') n,"! = ", r
call fm_set(500) !设定实型精度为500
t1 = to_fm('1') / to_fm('5') !转化常数为任意精度的实型,计算并赋值
t2 = to_fm('1') / to_fm('239')
pi = 4 * ( 4 * atan(t1) - atan(t2)) !计算Pi
call fm_form('f500.499', pi, r) !格式化任意精度实型变量,并转化成字符串
write(*,'(2/,A,G0)') "Pi=", r
end program arbitrary_precision
37 KB, 下载次数: 26
145.44 KB, 下载次数: 25
76.1 KB, 下载次数: 22
101.49 KB, 下载次数: 23
58.78 KB, 下载次数: 22
644.16 KB, 下载次数: 33
liudy02 发表于 2020-9-8 10:01
非常感谢推荐,这个应该是很有用的
不过,真正常见的对精度敏感的地方在于矩阵计算上
如果用于矩阵计算的话 ...
风平老涡 发表于 2020-9-10 08:46
有现成的, 不过要写一下接口。http://mplapack.sourceforge.net/
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |