C ++ có std::nextafter()
, trả về giá trị đại diện tiếp theo sau một giá trị dấu phẩy động đã cho f . Trong trường hợp của tôi, tôi muốn cho phép n bit slop trong các bit mantissa thấp hơn, vì vậy 3 bit slop sẽ yêu cầu nhận giá trị tiếp theo thứ 8 sau một số giá trị f đã cho . Tôi có thể gọi nextafter()
tám lần, nhưng có cách nào tốt hơn để xử lý việc này không?
Đối với hầu hết các giá trị, bạn có thể nhận được bằng cách truyền giá trị FP vào uint_64
, thêm dung sai ( 1<<3
cho 3 bit của độ dốc), sau đó chuyển trở lại double
, nhờ vào cách bố trí của IEEE 754. Tuy nhiên, điều đó phụ thuộc vào điểm nổi của IEEE 754 ( một giả định tốt, nhưng cũng không phải là đá rắn).
(Đối với nền, tôi muốn sử dụng điều này để nâng các điểm giao nhau trên bề mặt tia, đôi khi nằm bên trong bề mặt do không chính xác của FP. Những người quen thuộc với điểm nổi mạnh mẽ sẽ hiểu tại sao lại epsilon
là một giải pháp khủng khiếp.)
std::numeric_limits<T>::is_iec559
để kiểm tra xem IEEE 754 có được sử dụng hay không và chuyên môn hóa chức năng cho phù hợp.