Diễn đàn Hải Dương học

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Diễn đàn Hải Dương học

Giương buồm ra biển lớn !


3 posters

    Kỹ thuật ép kiểu trong Fortran

    avatar
    myanh

    -----
    -----


    Tổng số bài gửi : 26
    Danh dự : 0
    Join date : 16/01/2008

    Kỹ thuật ép kiểu trong Fortran Empty Kỹ thuật ép kiểu trong Fortran

    Bài gửi by myanh Sun Aug 31, 2008 10:57 am

    Mình có 1 đề bài về Fortran
    Tính S= 1+1/2+1/3+...+1/n
    Mình không hiểu là tại sao khi mình thay số 1.0 bằng số 1 thôi thì kết quả chạy chương trình sẽ ra hoàn toàn sai . Mong các bạn có thể giải thích cho mình . Xin cám ơn.

    Code:
    Integer i,n
    Real S

    !Chuong trinh

       Print*,'n='
       Read(*,*)n
       S=0
       Do i=1,n
          S=S+1.0/i
       Enddo
       
       Print*,'S=',S
       
    End
    namthinh2007
    namthinh2007

    *****
    *****


    Tổng số bài gửi : 85
    Danh dự : 0
    Join date : 18/01/2008
    Age : 39

    Kỹ thuật ép kiểu trong Fortran Empty Re: Kỹ thuật ép kiểu trong Fortran

    Bài gửi by namthinh2007 Sun Aug 31, 2008 12:26 pm

    Theo mình biết thì khi bạn chỉ để số 1 thôi thì chương trình sẽ hiểu đó là số nguyên, và khi đem chia cho i là số nguyên thì kết quả là số nguyên nên sai là phải rùi mặt dù bạn khai báo S là số thực. Không biết có thỏa mãn câu trả lời cho bạn chưa?
    tieuminh2510
    tieuminh2510

    *****
    *****


    Tổng số bài gửi : 350
    Danh dự : 5
    Join date : 15/01/2008
    Age : 38

    Kỹ thuật ép kiểu trong Fortran Empty Re: Kỹ thuật ép kiểu trong Fortran

    Bài gửi by tieuminh2510 Sun Aug 31, 2008 12:30 pm

    Ah vấn đề này dân lập trình chuyên nghiệp gọi là kỹ thuật ép kiểu thôi.

    Sở dĩ sai số như thế là do trong lập trình kiểu số thực (real) và kiểu số nguyên (integer) được lưu trử trên bộ nhớ chính hoàn toàn khác nhau. Và các phép toán của chúng cũng được thực hiện với cách thức khác nhau.

    Khi tính toán trên kiểu số nguyên (int) thì kết quả trả về là số nguyên (int).

    Vd: 1+2=3 ; 5/4=1...

    Trong chương trình trên nếu bạn này thay thế 1.0 (real) bằng 1 (int) thì phép toán trình biên dịch thực hiện sẽ là phép toán chia số nguyên và kết quả cuối cùng chắc chắn sẽ bằng 1 bất chấp n bằng mấy ! Vì 1/2 ,1/3, 1/4... trong phép chia số nguyên sẽ là 0.

    Thân !


    Được sửa bởi tieuminh2510 ngày Sun Aug 31, 2008 8:32 pm; sửa lần 1.
    avatar
    myanh

    -----
    -----


    Tổng số bài gửi : 26
    Danh dự : 0
    Join date : 16/01/2008

    Kỹ thuật ép kiểu trong Fortran Empty Re: Kỹ thuật ép kiểu trong Fortran

    Bài gửi by myanh Sun Aug 31, 2008 4:04 pm

    Xin cám ơn câu trả lời của các bạn

    Sponsored content


    Kỹ thuật ép kiểu trong Fortran Empty Re: Kỹ thuật ép kiểu trong Fortran

    Bài gửi by Sponsored content


      Hôm nay: Sun Sep 29, 2024 8:35 am