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;
}

 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Supporter Moderator đã bình luận 05:53 28-08-2021

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

Supporter Moderator đã bình luận 05:52 28-08-2021

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

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 05:06 28-08-2021

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

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 15:47 26-08-2021

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

Câu hỏi mới nhất