针对病态方程组对任何算法都将产生数值不稳定性,可采用高精度数值运算解决这个问题。
Fortran内置函数SELECTED_REAL_KIND(p, r),默认两个参数p是精度,r是范围。p是所需精度的十进制数值,r是以10^r次方表示的所需数值的范围。当执行该函数的时候,会返回达到或者超过指定精度或者范围的的实型数据的最小类别参数。使用该函数可以保持程序通用性,而不受平台限制。
kind_num = SELECTED_REAL_KIND(13,100)
kind_num = SELECTED_REAL_KIND(13)
kind_num = SELECTED_REAL_KIND(r=100,p=13)
kind_num = SELECTED_REAL_KIND(r=100)
以上都是函数的调用方法皆正确,因为函数参数是可选的。
注意程序中第二个变量所需的精度为13位小数和10^200次方的范围,但是处理器实际分配的精度为15位小数和10^308次方的范围.
●算例
采用的精度计算,结果为:
采用双精度计算,结果为:
更复杂的方程组可以用函数SELECTED_REAL_KIND选择所需精度。