Tôi có một số toán (trong C++) mà có vẻ là để tạo ra một số rất nhỏ, gần bằng không, số (tôi nghi ngờ các hàm gọi trig là vấn đề thực sự của tôi), nhưng tôi muốn phát hiện những trường hợp này để tôi có thể nghiên cứu chi tiết hơn.Làm thế nào để kiểm tra và xử lý các con số rất gần với số
Tôi hiện đang thử những điều sau, có đúng không?
if (std::abs(x) < DBL_MIN) {
log_debug("detected small num, %Le, %Le", x, y);
}
Thứ hai, bản chất của toán học là lượng giác trong tự nhiên (hay còn gọi là sử dụng rất nhiều lần chuyển đổi radian/độ và sin
/cos
/tan
cuộc gọi, vv), những gì sắp xếp của biến đổi tôi có thể làm để tránh các lỗi toán học ?
Rõ ràng đối với phép nhân tôi có thể sử dụng log transform - còn gì nữa?
Chúng ta có thể vui lòng xem một ví dụ về toán học đã nói, để chúng ta có thể nghĩ ra một điều gì đó thanh lịch? Những gì tôi có trong tâm trí của tôi là những thứ như 'cos x - 1' khi bạn có thể nhận được từ từ thay đổi kết quả khoảng không, và phải chọn cẩn thận khoan dung. –
Đối với các phép biến đổi để tránh các dòng dưới, điều trực tiếp nhất là Taylor mở rộng các biểu thức của bạn và sử dụng những gì xuất hiện cho các đối số nhỏ. Ví dụ, thay vì '1-cos (x)' sử dụng 'x * x/2' cho' x' nhỏ hơn một số ngắt. –