사용자가 다른 수학 함수처럼 사용할 수있는 C 수학 표현식을 쉽게 만들 수 있도록하는 무료 라이브러리가 있습니까? 나는 '인라인'수학 식처럼 빠르며 프로그램에서 여러 번 사용할 수있는 c 식/함수를 의미합니다. C에서 어떻게 든 할 수 있다고 생각하지만 CUDA dveice 함수 여야 만 진짜인지 알 수있는 사람이 있습니까?사용자가 함수를 생성하는 방법? [ 도서관 ? ]
답변
몇 가지 옵션이 있습니다.
void *s = make_func("2 * x + 7");
...
printf("%lf\n", call_func(s, 3.0)); // prints 13
...
printf("%lf\n", call_func(s, 5.0)); // prints 17
...
free_func(s);
하나의 옵션은 재귀 적 구조를 유지 함수 포인터와 상수로이를 구현하는 것입니다 : 당신이 사용자가이 같은 여러 번 "전화"할 수있는 무언가를 원하는 가정합니다. 뭔가 같은 : 당신이 이해할 수 있다면
(struct func *){ FUNC, &plus,
(struct func *){ FUNC, ×,
(struct constant *){ CONST, 2 },
(struct var *){ VAR, 'x' } }
(struct constant *){ CONST, 7 } }
- struct func
의 enum type_item
트리에서 다음 노드를 가리키는 데 사용됩니다
enum item_type { VAR, CONST, FUNC };
struct var {
enum item_type;
int id;
};
struct constant {
enum item_type;
double value;
};
struct func {
enum item_type;
double (*func)(double, double);
enum item_type *a, *b;
};
그런 다음 make_func
같은 무언가로 위의 문자열을 구문 분석 (또는 노드의 첫 번째 요소 인 enum
)이고 enum
은 항목 유형이 무엇인지 알아 내기 위해 코드에서 사용하는 코드입니다. 그러면 call(void *, ...)
함수를 사용할 때 얼마나 많은 변수가 있는지를 계산합니다.이 값은 call
함수가 전달되어야하는 추가 인수의 수입니다. 그런 다음 변수를 우리가 호출 한 값으로 대체 한 다음 계산을 수행합니다.
다른 옵션 (상당히 빠르며 쉽게 확장 할 수 있음)은 libjit과 같은 것을 사용하여 대부분의 작업을 수행합니다. 나는 그것을 사용한 적이 없지만 JIT 컴파일러는 필요에 따라 함께 문자열을 추가 할 수있는 기본 빌딩 블록 (예 : 추가, 곱하기 등의 "지침")을 제공하며 실제 어셈블리 코드로 컴파일합니다 이전에했던 것처럼 함수 포인터를 호출하는 생성 된 구문 트리를 거치지 않아야합니다.) 그래서 호출 할 때 가능한 한 빠르고 동적입니다.
libjit의 API를 잘 모르지만 필요한 것처럼 쉽게 할 수 있습니다. make_func
과 free_func
은 모두 위의 내용과 거의 같을 수 있습니다 (호출을 call_func
으로 변경해야 할 수도 있음). 기본적으로 사용자 문자열을 구문 분석하는 방법에 따라 JIT 객체를 구성, 사용 및 삭제합니다. 위와 동일하지만 실제로는 구문 트리, 데이터 형식 등을 직접 정의 할 필요가 없습니다.
희망이 어느 정도 도움이됩니다.
"상수"를 "문자 그대로"로 변경해야한다고 생각합니다. 오 잘. 나는 실제로 이것을 오늘 밤 나중에 재미있게 구현하려고 할 때 그것을 할 것이다. –
재미와 내 생각이 크게 달라 보이는 것 같습니다. :-디 –
libtcc
(TCC)은 매우 작고 빠른 JIT로 사용할 수 있습니다. 샘플 사용법은 libtcc_test.cc
을 참조하십시오.
- 1. Clojure : 런타임에 함수를 생성하는 방법
- 2. MS 우회 API 함수를 우회하는 우회 도서관
- 3. 도서관
- 4. 도서관
- 5. IOS 정적 방법 도서관, 문제
- 6. 전자 도서관 시스템 .. 시작하는 방법?
- 7. UserControl이 도서관
- 8. 도서관 채팅방
- 9. 재단 도서관
- 10. mysql 사용자 정의 함수를 사용하여 가우스 분포를 생성하는 방법
- 11. 도서관 아이폰 용 문서 생성기
- 12. 도서관 디자인의 곤란
- 13. 도서관 및 프로그래밍 정보 링크 구성 방법
- 14. 사용자가 양식을 제출 한 후 자동으로 웹 페이지를 생성하는 방법
- 15. .NET 벤 다이어그램 도서관
- 16. Java 인증 도서관
- 17. 도서관 프로젝트 및 리소스
- 18. 메이븐 웹 스피어 도서관
- 19. 도서관 피드백 - C++ 용
- 20. 부두를 임명하는 도서관?
- 21. 바이너리 파일을 생성하는 함수를 테스트하는 방법은 무엇입니까?
- 22. 이미지를 생성하는 함수를 사용하는 방법은 무엇입니까?
- 23. C# 런타임에서 해석되는 함수를 만드는 방법
- 24. ActionScript 3.0 : 사용자가 텍스트를 입력 할 때 함수를 실행하는 방법?
- 25. plupload - 사용자가 업로드 버튼을 클릭 할 때 함수를 호출하는 방법?
- 26. PHP 함수를 호출하는 방법?
- 27. 사용자가 CodeIgniter에서 컨트롤러 함수를 호출하도록 허용
- 28. 사용자가 종료 할 때 C# 함수를 실행하십시오.
- 29. 사용자가 NSSearchField에서 enter를 누르면 함수를 호출합니까?
- 30. jQuery를 사용하여 TinyURL을 생성하는 방법
사용자가이 함수를 어떻게 호출합니까? – Argote
[자동 프로그래밍] (http://en.wikipedia.org/wiki/Automatic_programming)과 같은 것을 의미합니까? – pmg
수학 파서를 원하십니까? –