Hiển thị kết quả từ 1 đến 2 / 2
  1. #1
    Tham gia
    14-12-2008
    Bài viết
    4
    Like
    0
    Thanked 0 Times in 0 Posts

    Ngạc nhiên giúp em trị thằng ieee 754 với :(

    em đang làm đề tài về quản lý vùng nhớ = c#
    em lưu số thực theo chuẩn ieee 754 với độ chính xác kép là 64bit tức 8 byte nhưng lúc em chuyển đổi số bên phần thập phân sang nhị phân thì có vấn đề phát sinh đó là lúc em thử chuyển 0.9 sang nhị phân nó ra dãy số tới 53 số như vậy nè
    11100110011001100110011001100110011001100110011001 101
    trong khi phần định trị M chỉ có 52 :|
    Code chuyển số phân phần thập phân qua nhị phân của em đây:
    double a = 0.9;
    a = a * 2;
    string chuoi = "";
    if (a == 1.0)
    richTextBox1.Text = "1";
    while (a != 1)
    {
    if (a > 1)
    {
    chuoi += "1";
    a = a - 1;
    }
    else if (a > 0)
    chuoi += "0";
    a = a * 2;
    }
    chuoi = chuoi + "1";
    richTextBox1.Text = chuoi + " " + chuoi.Length.ToString();
    Không biết code có sai chỗ nào ko nhưng em thử khoảng một vài số mẫu rồi thấy ko sai
    ví dụ: 0.6875 nó ra đúng là 1011
    0.5 nó ra 1
    0.25 nó ra 01
    Giả sử code ko sai thì với độ dài như vậy sao em có thể đẩy những số bên trái dấu . sang phải để thành dạng chuẩn 1. mấy được
    Ko biết em có hiểu sai cách lưu của dạng chuẩn này ko mong mấy huynh giúp em với . Thanks
    Quote Quote

  2. #2
    Tham gia
    02-09-2009
    Bài viết
    321
    Like
    0
    Thanked 2 Times in 2 Posts
    hình như bạn vẫn chưa hiểu j về kiểu IEEE 754 64 bit cả
    kiểu double nó có 52 bit phần định trị + 1 bit ẩn là 53 bit. như vậy bạn tính ra 53 bit là đúng rồi, sau đó đẩy bit 1 đầu tiên qua trái và chỉ lưu 52 bit thấp thôi
    đây là dạng số thực nhị phân nên chắc chắn lưu các số thập phân bình thường sẽ luôn ra 1 dạng vô tỉ (hoặc hữu tỉ vô hạn tuần hoàn), ko bao h lưu đc giá trị chính xác trừ các số có dạng lũy thừa 2

    mà tại sao bạn phải làm như vậy mà ko dùng các hàm chuyển đổi số thực có sẵn trong ngôn ngữ, vừa nhanh vừa chính xác hơn chương trình của bạn rất nhiều, vì thực tế đa số phần cứng đều có sẵn các lệnh để chuyển đổi như thế này

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •