Lapack: [버전 3.9.0] slasq3의 λ¬΄ν•œ 루프

에 λ§Œλ“  2020λ…„ 01μ›” 21일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: Reference-LAPACK/lapack

"slasq3"에 λŒ€ν•œ μž…λ ₯ λ§€κ°œλ³€μˆ˜κ°€ μ•„λž˜ νŒ¨ν„΄μ„ λ”°λ₯Ό λ•Œ:
i0 =3, n0=16, pp=1,desig=0.2f, qmax=0.2f, nfail=4, iter=1, ndiv = 2, ieee = 0, ttype = -1
이 ν•¨μˆ˜λŠ” μ½”λ“œ 라인 332 ~ 362 μ‚¬μ΄μ˜ λ¬΄ν•œ 루프에 빠진닀.
100% μž¬ν˜„.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

특히 λ°°μ—΄ z 에 ν¬ν•¨λœ 값을 μ‚¬μš©ν•˜μ—¬ 이에 λŒ€ν•œ μ™„μ „ν•œ μž¬ν˜„μžκ°€ β€‹β€‹μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 당신이 μ œκ³΅ν•œ 데이터와 μž„μ˜μ˜ z둜 문제λ₯Ό μž¬ν˜„ν•  수 μ—†μœΌλ©° λ°°μ—΄ μš”μ†Œ 쀑 ν•˜λ‚˜λΌλ„ NaN이 μ•„λ‹ˆλ”λΌλ„ λ‚˜μœ 일이 λ°œμƒν•  것이라고 상상 ν•©λ‹ˆλ‹€.

λͺ¨λ“  7 λŒ“κΈ€

이것이 이전 λ²„μ „μ—μ„œ μž‘λ™ν–ˆλ‹€κ³  μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? AFAIK 적어도 3.7.0 μ΄ν›„λ‘œ slasq ν•¨μˆ˜λŠ” μˆ˜μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ μ„€λͺ…μ—μ„œ TAUκ°€ μΆ©λΆ„νžˆ μž‘μ•„μ§€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 반볡되고 μžˆμŠ΅λ‹ˆκΉŒ?

이것이 이전 λ²„μ „μ—μ„œ μž‘λ™ν–ˆλ‹€κ³  μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? AFAIK 적어도 3.7.0 μ΄ν›„λ‘œ slasq ν•¨μˆ˜λŠ” μˆ˜μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ μ„€λͺ…μ—μ„œ TAUκ°€ μΆ©λΆ„νžˆ μž‘μ•„μ§€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 반볡되고 μžˆμŠ΅λ‹ˆκΉŒ?

μ£„μ†‘ν•©λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ 3.9.0μ—μ„œλ§Œ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 이 버전이 ν˜„μž¬ μœ μΌν•œ 버전이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

특히 λ°°μ—΄ z 에 ν¬ν•¨λœ 값을 μ‚¬μš©ν•˜μ—¬ 이에 λŒ€ν•œ μ™„μ „ν•œ μž¬ν˜„μžκ°€ β€‹β€‹μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 당신이 μ œκ³΅ν•œ 데이터와 μž„μ˜μ˜ z둜 문제λ₯Ό μž¬ν˜„ν•  수 μ—†μœΌλ©° λ°°μ—΄ μš”μ†Œ 쀑 ν•˜λ‚˜λΌλ„ NaN이 μ•„λ‹ˆλ”λΌλ„ λ‚˜μœ 일이 λ°œμƒν•  것이라고 상상 ν•©λ‹ˆλ‹€.

dmin이 nan이면 μ˜¬λ°”λ₯Έ 잘λͺ»λœ κ°’μœΌλ‘œ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ¬΄ν•œμ„ 막을 κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λ„ 이것에 λŒ€ν•΄ μƒκ°ν–ˆμ§€λ§Œ, NaNκ³Ό λΉ„κ΅ν•˜λŠ” κ·œμΉ™μ΄ λ§žλ‹€λ©΄ 이것은 μ•„λ§ˆλ„ λ¬Έμ œκ°€ 아닐 κ²ƒμž…λ‹ˆλ‹€.

μ½”λ“œλ₯Ό λΉŒλ“œν•˜κΈ° μœ„ν•΄ 4b3c7c249f6a2cfed76603d9987cf5164fa6f9e1을 μ‚¬μš©ν•˜λŠ” λ¬΄ν•œ 루프 μ—†μŒ:

      PROGRAM testSLASQ3
      IMPLICIT NONE

*     .. Scalar Arguments ..
      LOGICAL            IEEE
      INTEGER            I0, ITER, N0, NDIV, NFAIL, PP, TTYPE
      REAL               DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G,
     &                   QMAX, SIGMA, TAU
*     .. Array Arguments ..
      REAL               Z( 64 )
*     .. Subroutines ..
      EXTERNAL           SLASQ3

      PARAMETER ( IEEE=.FALSE. )
      PARAMETER ( I0 = 3 )
      PARAMETER ( QMAX = 1.0 )

      ITER=1
      N0=16
      NDIV=2
      NFAIL=4
      PP=1
      TTYPE=-1
      DESIG=0.2
      DMIN1=0.1
      DMIN2=0.1
      DN=1.0
      DN1=1.0
      DN2=1.0
      G=1.0
      TAU=1.0

      Z = (/0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,
     &      0.1,0.2,0.3,0.4,0.5,0.6,
     &      0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,
     &      0.1,0.2,0.3,0.4,0.5,0.6,
     &      0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,
     &      0.1,0.2,0.3,0.4,0.5,0.6,
     &      0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,
     &      0.1,0.2,0.3,0.4,0.5,0.6/)

      CALL SLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
     &                   ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
     &                   DN2, G, TAU )

      END PROGRAM testSLASQ3

@weslleyspereira κ²Œμ‹œλ¬Όμ„ 기반으둜 이 문제λ₯Ό μ’…λ£Œν•˜κ² μŠ΅λ‹ˆλ‹€.
@Peter9606 문제λ₯Ό μ‹ κ³ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. λ¬Έμ œκ°€ λ‹€μ‹œ λ°œμƒν•˜λ©΄ λ‹€μ‹œ λ¬Έμ˜ν•΄ μ£Όμ„Έμš”.
쀄리앙.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰