我刚才有一个简短的问题,这个问题是我在尝试获取Fortran中数字的平方根时所做的观察.比较以下两个陈述
wp = selected_real_kind(15, 307)
somevar = sqrt(3.0)
somevar2 = (3.0_wp)**(1.0/2.0)
Run Code Online (Sandbox Code Playgroud)
我发现somevar = 1.7320507764816284和somevar2 = 1.7320508075688772.根据https://apod.nasa.gov/htmltest/gifcity/sqrt3.1mil,似乎somevar2是更正确的答案.我的问题是如果声明
squareroot = real(x,wp) ** (1.0/2.0)
Run Code Online (Sandbox Code Playgroud)
将始终为数字的平方根得到更正确的值?
如果是这样,这与sqrt()函数默认返回单个精度变量的事实有关,或者这与使用的编译器有关?
将sqrt你在这里引用是通用内部函数.此泛型接受任何实数或复数参数,并返回与参数类型和种类相同的结果.
在这种情况下,参数3.0是默认类型的实数(文字常量),因此结果也是默认类型的实数.另一方面,表达式(3.0_wp)**(1.0/2.0)是带有类型参数的真实表达式wp.很可能这是一个比其他真实更高精度的真实.
如果你写,sqrt(3.0_wp)那么这两个表达式将是同一类,我希望这两个值更接近.
更一般地说,我不希望第二个表达式总是给出更准确的结果.