Như tít ạ.
Bài tập của mình là xây dựng một hàm tính toán.
Nhưng vấn đề là thầy giáo bắt mở rộng cho cả số thực
Mà số thức thì không có phép toán lấy số dư ( % ấy)
Bây giờ mình muốn kiểm tra xem số nhập vào là nguyên hay thực thì làm sao ạ?
Như tít ạ.
Bài tập của mình là xây dựng một hàm tính toán.
Nhưng vấn đề là thầy giáo bắt mở rộng cho cả số thực
Mà số thức thì không có phép toán lấy số dư ( % ấy)
Bây giờ mình muốn kiểm tra xem số nhập vào là nguyên hay thực thì làm sao ạ?
Lấy x - (int) x thì ra phần lẻ của x.
Đúng rồi vậy mà mình không nghĩ ra ^^!
câu hỏi của bạn khá thú vị mình sẽ chỉ ra điều thú vị ở đây:
Cách này không xác định được 1 số có kiểu int hay float
Ví dụ a=9.0
Có thể người dùng nhìn 9.0 = 9 = số int
Nhưng trên máy tính 9 int khác 9.0 float
Nếu 1 hàm nào đó chỉ tính toán dựa vào giá trị của biến thì không sao. Nhưng nếu tính toán còn dựa vào kiểu của biến thì fail
Tại thớt viết thế chứ làm sao mà kiểm tra được kiểu do mình đọc ra chứ C mà, runtime làm sao mà biết.
Chắc thớt sẽ dùng float để nhận luôn số nguyên rồi, giờ tách phần lẻ ra là biết ngay.
cảm ơn các bạn.
Đề bài của mình là xây dựng máy tính toán cơ bản. Nhưng mà với phép tính % thì chỉ tính số nguyên cho nên nếu mình khai báo số thực ban đầu thì lại bị báo lỗi chỗ đó.
fload check = x - ( (int) x );
Nếu check = 0 thì là số nguyên, nếu khác 0 thì là số thực
mình nghĩ như thế chỉ áp dụng số trong phạm vi số kiểu int, nếu lớn hơn mà ép về kiểu int thì thua rồi
float
thì tầm int
thôi ko hơn được vì chỉ có 23 bit giá trị thôi. Quá 2^23-1 là bắt đầu ko phân biệt được rồi, do bản chất của float
.
Thực ra thớt vẫn có thể sử dụng hàm fmod
.
trong math.h có hàm fmod() có thể check được kiểu đấy
if (fmod(f, 1) == 0 )
{
cout << "type of f is int";
}
else
cout << "float";
nhưng hàm này phải trả giá hiệu năng chương trình