weixin_44198286 2021-03-23 16:44 采纳率: 0%
浏览 37

IDL循环内外结果不同

plinear(k,w)是自己写的一个函数,就是一些数学算式,有一个输出值。确定参数k,w后代入得输出值z。

k=1.94d0
wr=1.39929d0
w=dcomplex(wr,0d0)
z=plinear(k,w)
print,z

但是把这个函数放在一个循环里,同样的参数算出的输出值和单独算出来的不一样!

k=1.94d0
for wr=1.39928d0,1.39930d0,1d-5 do begin
  w=dcomplex(wr,0.d0)
  z=plinear(k,w)
  print,k,wr,z,format='(f5.2,d16.11,e14.6)'
endfor

我非常迷惑,精度应该也是相同的,请问是哪里的问题呢?是函数plinear有问题导致的吗?

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-23 23:16
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    在代码中,您使用了双精度浮点数进行计算,但是在循环中`wr`参数的值变化非常小(1d-5),这可能会导致计算过程中出现舍入误差,导致最终输出值的精度有所差异。 您可以尝试增加输出值的精度,或者在循环中增加对精度控制的代码,来避免这种情况。 另外,也可以检查一下函数`plinear`的实现,确保在输入参数相同的情况下能够稳定输出相同的结果。 以下是一个简单的示例代码,用于说明如何增加精度和控制循环中的计算误差:
    program precision_test
      real(8) :: k
      real(8) :: wr, w
      real(8) :: z
      integer :: i
      k = 1.94d0
      do i = 1, 3
        wr = 1.39928d0 + i * 0.00001d0
        w = dcomplex(wr, 0.d0)
        z = plinear(k, w)
        print *, "k =", k, ", wr =", wr, ", z =", z
      end do
    contains
      function plinear(k, w) result(z)
        real(8), intent(in) :: k
        complex(8), intent(in) :: w
        real(8) :: z
        ! Your implementation of the plinear function
        z = your_calculation(k, w)
      end function plinear
    end program precision_test
    

    您可以根据实际情况修改函数plinear的实现,以及在循环中对计算精度进行控制,来避免出现精度差异的情况。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography