Fortran中的浮点数,默认是单精度数,也就是6-7位的精度。双精度数有15位
注意,只要你写的是2.0,1.0之类的数字,就默认是单精度,并且不会强制类型转换
什么意思呢?
看这样一个例子
program try
implicit none
double precision E_i,R,e,e2,e3
E_i=1.2e8
R=8314
write (*,*) "a=", E_i
write (*,*) "b=", R
write (*,*) "1.2e8/8314=", E_i/R
e=exp(-E_i/(8.3147295*1093.0))
write (*,*) "e=", e
e2=exp(-1.2e5/(8.3147295*1093.0))
write (*,*) "e2=", e2
e3=exp(-1.2d8/(8314.7295d0*1093d0))
write (*,*) "e3=", e3
end program
gfortran编译,输出结果是

这里就看出端倪了,e的结果是0
计算机先算E_i/(8.3147295*1093.0)
再算exp
第一步计算的时候,数值已经下溢了。造成结果为0
此外我们看到,e2与e3的结果也是有轻微差别的
e2是一种折中的方法,先手动把大的数字约分掉,让数值不下溢
很简单
在所有使用字面浮点数的场合加上d0
比如1/2使用1d0/2d0
8.314使用8.314d0
http://epsilong.blog.163.com/blog/static/8569511820095143752176/
2009-06-14 15:07:52| 分类:
程序编程 |举报
|字号 订阅
我耗费巨大心力,使用两门语言完成课程作业,最后成绩还不如人家网上下载的简单代码,气得我好些日子吃不下饭,不过凡是过往,皆为序章,最后数值分析考试考得还行,总成绩也不至于太差,hihi。
借助python3的WXpython库实现可视化,包含多窗口跳转管理功能、窗口划分测试代码、十个数值分析课程作业习题的可视化窗口并且实现了连续跳转以及结题过程可视化。
使用封装Fortran90作为计算内核,提高计算效率。包含Fortran拉格朗日插值法、多项式拟合、隆贝格积分法、LU分解和基于LU分解的线性方程组求解方式、高斯-赛德尔方法、割线法、反幂法、龙格库塔方法案例各一个。
童叟无欺,值得下载!!!
错误实例01:program subroutine
real*4 arr
arr=1.1 call fun1(arr)endsubroutine fun1(arr) real*8 arr write(*,*) arr end情况下
主程序定义了一个 单精度的变量 arr ,赋值为1.1,
子函数的变量类型是双精度。
打印结果是
[root
implicit none
! //LBM model
Real*8, parameter:: w(0:8) = (/4.0d0/9.0d0,1.0d0/9.0d0,1.0d0/9.0d0,1.0d0/9.0d0,1.0d0/9.0d0,1...
首先,阶码上溢出。正指数(即阶码值)超过了最大允许值。比如阶码用8bit移码表示,正指数却有128,即无法表示(8bit移码中真值表示范围为-126~127,-127的阶码全0表示非规格化数;而-128的阶码全1,表示无穷大)即上溢出。 如果结果为整数,则称为正上溢出;如果结果为负数,则称为负上溢出。这种情况为软件故障,需要
文章目录前言一、Fortran变量命名规则二、变量的类型和其声明(Type and Declarations)1.变量类型2.声明3.定义常量4.整数和浮点变量总结
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Fortran变量命名规则
变量名最多是6个字符。这六个字符必须从a-z和数字0-9里选取。首个字符必须是字母。Fort