Tôi đang duy trì một chương trình lấy dữ liệu từ chương trình PDP-11 (được mô phỏng) và đặt nó vào một hệ thống dựa trên Windows hiện đại. Chúng tôi đang gặp sự cố với một số giá trị dữ liệu được báo cáo là "1. # QNAN" và cũng "1. # QNB". Khách hàng gần đây đã tiết lộ rằng các giá trị 'xấu' trong chương trình PDP-11 được biểu thị bằng 2 từ 16 bit với tất cả các bit được đặt trừ từ đầu tiên. Tôi nghĩ rằng đó là khi chúng tôi cố gắng chuyển đổi chúng sang IEEE nổi mà chúng tôi đang nhận được các lỗi.Liệu C++ này có chuyển đổi PDP-11 thành IEEE?
Tôi đã tìm thấy mã bên dưới được sử dụng để chuyển đổi các giá trị PDP-11 thành IEEE. Tôi không liên lạc với sự phức tạp của các đại diện điểm nổi nhưng điều này có vẻ hơi đơn giản với tôi! Điều này thực sự có thể chuyển đổi định dạng PDP-11 sang IEEE không?
// ---------------------------------------------------------------- cnvPDPfloat
// CNVPDPFLOAT
// ----------------------------------------------------------------------------
//
// Converts PDP11 float (two 16-bit words) into IEEE float
//
// PDP11 and IEEE floats have same layout so can be mapped onto eachother.
// But PDP11 exponent must have 2 subtracted for IEEE. Or just divide by 4.
//
float cnvPDPfloat(PDP11Float input)
{
union
{
unsigned long pdp11;
float ieee;
} uFloat;
uFloat.pdp11 = (input.word[0] << 16) + input.word[1];
return (uFloat.ieee/(float) 4.0);
}
--- Alistair.
1 chỉ vì thực tế là bạn phải duy trì PDP-11 mã. –
Lưu ý rằng '1. # QNB' đơn giản là' 1. # QNAN' "được làm tròn" thành 4 vị trí. (Tôi không thể tìm thấy câu hỏi SO trước đó về trường hợp phổ biến hơn của '# INF' đang được" làm tròn "thành' # J'.) –