[Fortran] Неправильный результат функции

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by WNZRS, 9 Dec 2010.

  1. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    [Fortran] Неправильный результат функции [Решено]

    Есть функция:
    Code:
    function fun1(t)
    	fun1 = exp(t) * ( 1.1 - sqrt(1.21 - exp(-t)) )
    end
    и программа:
    Code:
    program tsfs2p16
    data ninp / 5 /, nres / 6 /
    open(unit=ninp, file='testfun.inp')
    open(unit=nres, file='result')
    
    read(ninp,101) n
    read(ninp,100) t0, tn
    write(nres, *) '#	t0=',t0,'	tn=',tn,'	n=',n
    ht=(tn-t0)/n
    write(nres,1100)
    do i=0,n
    	t=t0+i*ht
    	r0=fun1(t)
    	write(nres,1001) i, t, r0
    enddo
    close(nres)
    100 format(f15.7)
    101 format(i15)
    1100 format(1x,' #',2x,'i',12x,'t',12x,'fun1')
    1001 format(1x,i5,2x,2x,f15.7,f15.7,f15.7)
    end
    При вводе n=8, t0 = 1.2, tn = 16 результат правильный
    При вводе n=8, t0 = 12, tn = 16 идёт не правильный результат (правильный определялся через вольфрам альфа)

    Почему становится не правильный результат и как это лечить?

    PS: Эту же прогу писал на C/C++ всё решилось заменой типа констант (1.1f -> 1.1 and 1.21f -> 1.21)
    PSS: Всё компилится под ubuntu с помощью gfortran

    Ответ: Надо заменить константы на 1.1 -> 1.1D+0 and 1.21 -> 1.21D+0
     
    #1 WNZRS, 9 Dec 2010
    Last edited: 9 Dec 2010