Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình thấy bình thường mà, bạn trừ đi bao nhiêu thì cộng lại bấy nhiêu sẽ ra lại số cũ thôi. Giữa 2 vòng for bạn in thử biến a ra thì bạn sẽ thấy nó khác 0.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Như bạn cũng biết, trong hệ thập phân có những số vô tỉ, ví dụ như 1/3, 1/7 ..... tức là hàng thập phân dài vô tận. Trong hệ nhị phân cũng có những số như thế và 0.01 cũng là một trong những số đó. Số 0.01 khi lưu xuống máy nó sẽ là một số có giá trị rất gần với 0.01 chứ không phải chính xác là 0.01. Do đó khi bạn trừ liên tiếp 100 lần thì sẽ được kết quả gần = 0 chứ không phải là 0.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi meoconlongvang
    Như bạn cũng biết, trong hệ thập phân có những số vô tỉ, ví dụ như 1/3, 1/7 ..... tức là hàng thập phân dài vô tận. Trong hệ nhị phân cũng có những số như thế và 0.01 cũng là một trong những số đó. Số 0.01 khi lưu xuống máy nó sẽ là một số có giá trị rất gần với 0.01 chứ không phải chính xác là 0.01. Do đó khi bạn trừ liên tiếp 100 lần thì sẽ được kết quả gần = 0 chứ không phải là 0.
    Thank bạn, mình cũng biết vậy. Tuy nhiên mình không hiểu tại sao kết quả lại ra như trên.

    Có một đoạn code này nữa, thì kết quả lại là a = 1.0000

    Mã nguồn PHP:
    #include <stdio.h> int main( ) { float a=1.0; long i; for(i=0; i<100; i++) { a = a - 0.01; } /* now reverse */ for(i=0; i<100; i++) { a = a + 0.01; } /* check if exact reversal occurred */ if (a==1.0) { printf("correct! a=%e
    ",a); /* why is a==1.0? */ } else { printf("error! a = %e
    ",a); } }  
    Mong các bạn giúp đỡ!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •