Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Gặp lỗi chuyển số thực sang nhị phân
21:11 24-08-2021
870 lượt xem
6 bình luận
05:49 28-08-2021
Mình muốn chuyển 1 số thực sang nhị phân thì mình làm theo cách ở dưới đây, đến đoạn đổi phần dư thì mình gặp lỗi lúc in ra nó thêm một số cố định ở sau là -858993460. Mong mọi người chỉ giúp mình những lỗi sai để mình khắc phục. Mình cảm ơn
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int main()
{
double d;
int a, i = 0, j = 0;
long long bint = 0;
int m[64], bina = 0;
double b;
cout << "CHUYEN DOI THAP PHAN SANG NHI PHAN";
cout << "\nNhap so thap phan(10) n = ";
cin >> d;
a = (int)d;
b = d - a;
while (a != 0)
{
bint += (a % 2) * pow(10,i);
++i;
a /= 2;
}
cout << "Phan nguyen: " << (int)d << " = " << bint << endl;
while (b != 0)
{
bina = (int)(b * 2);
m[j] = bina;
b = (b * 2) - bina;
++j;
}
cout << "Phan du: ";
for (int n = j; n >= 0; n--) {
cout << m[j - n];
}
return 0;
}
Trích bình luận của bạn Hoàng Trung
Trong C++ hàm printf có định dạng %x giúp hiển thị đc dạng Nhị phân nhưng chỉ dành cho Số nguyên, dùng cho Số Thực ko đc
Giải pháp là bạn dùng Union để 2 kiểu dữ liệu giữa Số nguyên và Số Thực cùng chung "địa chỉ bộ nhớ" (nhớ dùng 2 kiểu dữ liệu phải cùng size bộ nhớ)
Bạn chỉ việc gán giá trị vào kiểu Số Thực, còn lại dùng %x xem trong kiểu Số nguyên
Trích bình luận của bạn Kou Tsuneka
Chắc gì phần dư đã biểu diễn được. Đoạn b = d - a; có thể sinh sai số.
Tìm hiểu chuẩn IEEE754 từ đó lấy ra bit. Kiểm tra xem complier có hỗ trợ IEEE 754 không trước.
https://en.cppreference.com/w/cpp/types/numeric_limits/is_iec559?fbclid=IwAR1oFv_1SxsYtSIkWFQzJSU04nTlpggO44EGQ-Ke-w8J6HZ0MmUx7XLKq0g
Trong C++ hàm printf có định dạng %x giúp hiển thị đc dạng Nhị phân nhưng chỉ dành cho Số nguyên, dùng cho Số Thực ko đc
Giải pháp là bạn dùng Union để 2 kiểu dữ liệu giữa Số nguyên và Số Thực cùng chung "địa chỉ bộ nhớ" (nhớ dùng 2 kiểu dữ liệu phải cùng size bộ nhớ)
Bạn chỉ việc gán giá trị vào kiểu Số Thực, còn lại dùng %x xem trong kiểu Số nguyên
Chắc gì phần dư đã biểu diễn được. Đoạn b = d - a cod thể sinh sai số.
Tìm hiểu chuẩn IEEE754 từ đó lấy ra bit. Kiểm tra xem complier có hỗ trợ IEEE 754 không trước.
URL tham khảo