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

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


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

Share

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

Bài gửi by myanh on 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
avatar
namthinh2007

*****
*****

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

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

Bài gửi by namthinh2007 on 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?


_________________
Không có chuyện gì là không thể!
avatar
tieuminh2510

*****
*****

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

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

Bài gửi by tieuminh2510 on 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.

myanh

-----
-----

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

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

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

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

Sponsored content

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

Bài gửi by Sponsored content


    Hôm nay: Sun Dec 17, 2017 1:35 am