16位精度问题
我要做的是一个涡模拟的过程,每隔一个时间步长出现一个新的涡,此涡的涡量取决于前面出现的所有的涡,我要算1000个涡,所以前面任何一个涡量运算有偏差,积累一千步以后都会使最后的结论有很大误差。所以我想要用十六位的有效运算精度,从网上查可以这样定义
Integer , parameter :: NP = SELECTED_REAL_KIND(16)
real(Kind = NP) :: U,a,dt
问题是,这样定义以后,我程序中的方程中的常数项,比如说是2,是要写成‘2d0’这样吗?还是像网上说的要写成‘2q’
我试过‘2d0’, 结果好像也不太对,‘2q'的话编译器根本不认
还有,平方项也需要写成’2d0‘这种形式吗?比如说’**2‘还是’**2d0‘
此外,我的变量U,a,dt是需要用户自己输入的,输入时直接敲进’1, 1, 0.1‘这样的数字,会不会影响精度
我用的是intel fortran 2013, windows7 系统 64位,谢谢各位大大能够指点
本帖最后由 li913 于 2015-3-8 09:07 编辑
2.0q0或者2.0_16 或者 2.0_NP 推荐用 2.0_NP 来写常量。
用户输入的 1.0 不需要有后缀,转换时只要变量是16位精度的,一般都不会丢。 谢谢啦!!
页:
[1]