Có phần mềm nào có thể tự động tạo các thường trình điểm C chính xác bằng số từ các công thức tượng trưng không?


25

Với một hàm thực của các biến thực, có phần mềm nào có thể tự động tạo mã chính xác bằng số để tính hàm trên tất cả các đầu vào trên một máy được trang bị số học IEEE 754 không?

Ví dụ: nếu hàm thực được đánh giá là:

f (a, b, c) = \ frac {-b - \ sqrt {b ^ 2 - 4ac}} {2a}

Phần mềm sẽ xem xét hủy bỏ thảm khốc và có thể tra cứu bảng đầu ra cho một số bộ đầu vào nhất định để tránh mất độ chính xác tính toán.

Ngoài ra, có phần mềm nào có thể tạo thói quen tra cứu dựa trên bảng thuần túy để tính toán một hàm nhất định với độ chính xác cao không?


5
Vấn đề khó nói chung.
dmckee

1
Nếu vấn đề cụ thể là về tính toán gốc (hoặc hệ số hóa) của các đa thức, thì có một số thư viện C (hoặc C ++) ngoài kia.
moala

2
Bạn có thể muốn xem loạt bài viết xuất sắc của Richard Harris trên tạp chí ACCU Overload về The Floating Point Blues . Tôi đã lập chỉ mục cho họ trên Lập trình viên.SX cho những người có thể quan tâm.
Đánh dấu gian hàng

Câu trả lời:


25

Giải pháp tốt nhất mà tôi biết là chương trình biểu mang tính biểu tượng trong Mathematica , Maple , hoặc SymPy ; tất cả các liên kết đi trực tiếp đến tài liệu tạo mã. Tất cả các chương trình trên có thể tạo mã bằng C hoặc Fortran.

Không có chương trình nào ở trên đề cập đến độ chính xác trong số học của IEEE 754; nói chung, sẽ khó có thể lường trước tất cả các nguồn hủy bỏ thảm khốc, như @dmckee lưu ý. Thật khó để thay thế chuyên môn của con người trong phân tích số.

Để cung cấp một ví dụ cụ thể, hãy xem xét tính toán các hàm lượng giác với độ chính xác cao cho các đầu vào tùy ý trong . Có nhiều chiến lược để làm như vậy, một số thậm chí phụ thuộc vào phần cứng, như xem trong bài viết Wikipedia Lượng giác . Tất cả các thuật toán đòi hỏi sự khéo léo và phân tích số, thậm chí các thuật toán phụ thuộc vào bảng tra cứu và chuỗi Taylor hoặc phép nội suy (xem bài viết Wikipedia The Dilemma của Table-Maker ). Để biết thêm chi tiết, hãy xem câu hỏi Stack Overflow liên quan Làm thế nào để các hàm lượng giác hoạt động? .[0,2π]

Phần mềm tạo mã hoặc thói quen để tính toán các hàm tùy ý có độ chính xác cao không chỉ cần nhận biết các lỗi hủy mà còn cả các xấp xỉ hàng loạt (Taylor, Padé, Ch Quashev, hợp lý, v.v.) để tính các hàm không được xác định theo các điều khoản của một số hữu hạn của phép cộng, phép trừ, phép nhân, phép chia và phép dịch bit. (Xem Lý thuyết gần đúng .)


4
"Thật khó để thay thế chuyên môn của con người trong phân tích số." - điều này một mình xứng đáng +1.
JM

"Thật khó" không giống như "không thể". Có "định lý việc làm đầy đủ" cho một số công việc (ví dụ: người viết trình biên dịch). Có một cho các nhà phân tích số?
Bút danh


14

Nếu bạn muốn biết chúng ta cách xa gói phần mềm như vậy bao xa, vui lòng xem ghi chú làm việc LAPACK 2001 về điện toán xoay vòng Givens một cách đáng tin cậy và hiệu quả . Tôi hy vọng hầu hết những người không chuyên (và nhiều chuyên gia!) Trong phân tích số sẽ ngạc nhiên khi biết có bao nhiêu phân tích đã giải quyết được một vấn đề đơn giản như vậy:

Cho , tìm và sao chof,gCcRsC

R(c,s)[fg]=[css¯c][fg]=[r0]
,

trong đó là đơn vị. Cân bằng độ tin cậy với hiệu quả tính toán cùng với các vấn đề tinh tế hơn như tính liên tục là rất không cần thiết và khó có thể được tự động hóa trong tương lai gần.R(c,s)


1
+1 Đây là một ví dụ tuyệt vời, cảm ơn bạn. Tôi đoán nếu một giải pháp cho thực tế tồn tại, thì nó có thể được điều chỉnh theo số phức.
Daniel Trebbien

Tôi có lẽ nên đề cập rằng khó khăn cơ bản không nằm ở thực tế là s có thể phức tạp, nhưng trong việc tránh tràn và / hoặc tràn không cần thiết. Nó có liên quan đến chức năng hypot: en.wikipedia.org/wiki/Hypot
Jack Poulson

11

Việc tạo mã và tiền biên dịch các biểu thức toán học đang trở nên phổ biến hơn.

Trong khi các gói tượng trưng như SymPy, Mathematica và Maple có thể bao gồm việc tạo mã, tôi không tin rằng bất kỳ ai trong số họ cũng nghĩ khó về số.

Có một vài dự án khác mà người ta có thể nhìn vào đó quan tâm cả về biểu tượng và số học.

Theano là một dự án tập trung vào các hoạt động mảng. Họ xác định và thay thế một số hoạt động được biết là bị điều hòa số. Tôi không chắc chắn rằng điều này bao gồm trường hợp cụ thể của bạn nhưng nó đáng để xem xét.

Xoắn ốc cũng có thể thú vị với bạn. Họ cũng biên dịch trước một cây cú pháp trừu tượng và cũng xem xét các vấn đề về số. Họ quan tâm nhiều hơn đến các phép toán vô hướng (như ví dụ của bạn). Tuy nhiên, chúng cũng khá chuyên biệt cho một miền cụ thể.

Tuy nhiên, sự tăng trưởng trong lĩnh vực này là đáng khích lệ. Người ta có thể lạc quan rằng câu hỏi của bạn sẽ có câu trả lời tốt hơn trong một vài năm.


2
Đã đồng ý; có lẽ câu trả lời của tôi được đưa ra là quá bi quan, vì có rất nhiều giải pháp cụ thể cho tên miền, nhưng vấn đề chung là ... khó.
Jack Poulson

4

Nói chung, tôi có thể nói rằng người triển khai trình tạo mã trong SymPy thậm chí không thử = P.

Paolo Bientinesi đã phát triển một phương pháp để tạo ra bằng chứng ổn định của các thuật toán đại số tuyến tính, được tạo bằng cách sử dụng ký hiệu FLAME của Robert van de Geijn.

Xem bài viết này , hoặc một phiên bản ghi chú làm việc dài hơn .


1

Sage cho phép bạn thể hiện các công thức trong Cython (một biến thể của python tạo mã C); tuy nhiên, để trả lời cho câu hỏi chung chung hơn của bạn: không. Hãy xem xét Định lý của Rice .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.