5 typedef const char * mps_string;
8 #ifndef __MPS_NOT_DEFINE_BOOL
10 {
false = 0,
true = 1 } mps_boolean;
15 typedef bool mps_boolean;
18 #define mps_boolean_to_string(x) ((x) == true) ? "true" : "false"
21 typedef int mps_debug_level;
27 (sizeof(x) == sizeof(long double) ? isnan_ld (x) \
28 : sizeof(x) == sizeof(double) ? isnan_d (x) \
30 static inline int isnan_f (
float x)
34 static inline int isnan_d (
double x)
38 static inline int isnan_ld (
long double x)
46 (sizeof(x) == sizeof(long double) ? isinf_ld (x) \
47 : sizeof(x) == sizeof(double) ? isinf_d (x) \
49 static inline int isinf_f (
float x)
51 return !isnan (x) && isnan (x - x);
53 static inline int isinf_d (
double x)
55 return !isnan (x) && isnan (x - x);
57 static inline int isinf_ld (
long double x)
59 return !isnan (x) && isnan (x - x);
166 typedef enum mps_root_status mps_root_status;
167 typedef enum mps_root_inclusion mps_root_inclusion;
168 typedef enum mps_root_attrs mps_root_attrs;
170 typedef enum mps_algorithm mps_algorithm;
171 typedef enum mps_operation mps_operation;
172 typedef enum mps_option_key mps_option_key;
173 typedef enum mps_structure mps_structure;
174 typedef enum mps_representation mps_representation;
175 typedef enum mps_density mps_density;
176 typedef enum mps_output_format mps_output_format;
177 typedef enum mps_output_goal mps_output_goal;
178 typedef enum mps_search_set mps_search_set;
179 typedef enum mps_phase mps_phase;
180 typedef enum mps_starting_strategy mps_starting_strategy;
209 no_phase, float_phase, dpe_phase, mp_phase
212 static const mps_string mps_phase_string [] = {
213 "No phase",
"Float phase",
"DPE phase",
"MP phase"
215 #define MPS_PHASE_TO_STRING(phase) (mps_phase_string[phase])
222 MPS_OPERATION_CLUSTER_ANALYSIS,
223 MPS_OPERATION_ABERTH_FP_ITERATIONS,
224 MPS_OPERATION_ABERTH_DPE_ITERATIONS,
225 MPS_OPERATION_ABERTH_MP_ITERATIONS,
226 MPS_OPERATION_REGENERATION,
227 MPS_OPERATION_STARTING_POINTS_FP,
228 MPS_OPERATION_STARTING_POINTS_DPE,
229 MPS_OPERATION_STARTING_POINTS_MP,
231 MPS_OPERATION_REFINEMENT
233 static const mps_string mps_operation_string [] = {
234 "Cluster Analysis",
"Aberth floating point iterations",
"Aberth DPE iterations",
235 "Aberth multiprecision iterations",
"Regeneration",
"Starting point computation in floating point",
236 "Starting point computatino in DPE",
"Starting point computation in multiprecision",
237 "Shift of the polynomial",
"Refinement of the approximation"
239 #define MPS_OPERATION_TO_STRING(operation) (mps_operation_string[operation])
244 enum mps_root_status {
245 MPS_ROOT_STATUS_NEW_CLUSTERED,
246 MPS_ROOT_STATUS_CLUSTERED,
247 MPS_ROOT_STATUS_ISOLATED,
248 MPS_ROOT_STATUS_APPROXIMATED,
249 MPS_ROOT_STATUS_APPROXIMATED_IN_CLUSTER,
250 MPS_ROOT_STATUS_NOT_FLOAT,
251 MPS_ROOT_STATUS_NOT_DPE,
252 MPS_ROOT_STATUS_MULTIPLE
256 static const mps_boolean mps_table_of_approximated_roots [] = {
false,
false,
false,
true,
true,
false,
false,
false };
257 static const mps_boolean mps_table_of_computed_roots [] = {
false,
false,
true,
true,
true,
false,
false,
false };
258 static const mps_boolean mps_table_of_improvable_roots [] = {
false,
false,
true,
true,
false,
false,
false,
false };
259 #define MPS_ROOT_STATUS_IS_APPROXIMATED(status) (mps_table_of_approximated_roots[status])
260 #define MPS_ROOT_STATUS_IS_COMPUTED(status) (mps_table_of_computed_roots[status])
261 #define MPS_ROOT_STATUS_IS_IMPROVABLE(status) (mps_table_of_improvable_roots[status])
264 static const mps_string mps_root_status_string[] = {
265 "Clustered (pinned)",
269 "Approximated in a cluster",
270 "Not representable as floating point",
271 "Not representable as DPE",
274 #define MPS_ROOT_STATUS_TO_STRING(status) (mps_root_status_string[status])
280 enum mps_root_attrs {
283 MPS_ROOT_ATTRS_NOT_REAL,
285 MPS_ROOT_ATTRS_NOT_IMAG,
286 MPS_ROOT_ATTRS_NOT_REAL_AND_IMAG
290 static const mps_string mps_root_attrs_string [] = {
296 "Not Real nor imaginary"
298 #define MPS_ROOT_ATTRS_TO_STRING(attrs) (mps_root_attrs_string[attrs])
304 enum mps_root_inclusion {
305 MPS_ROOT_INCLUSION_UNKNOWN,
306 MPS_ROOT_INCLUSION_IN,
307 MPS_ROOT_INCLUSION_OUT
311 static const mps_string mps_root_inclusion_string [] = {
316 #define MPS_ROOT_INCLUSION_TO_STRING(inclusion) (mps_root_inclusion_string[inclusion])
326 MPS_ALGORITHM_STANDARD_MPSOLVE,
331 MPS_ALGORITHM_SECULAR_GA
339 enum mps_option_key {
372 MPS_STRUCTURE_REAL_INTEGER,
373 MPS_STRUCTURE_REAL_RATIONAL,
374 MPS_STRUCTURE_REAL_FP,
375 MPS_STRUCTURE_REAL_BIGFLOAT,
376 MPS_STRUCTURE_COMPLEX_INTEGER,
377 MPS_STRUCTURE_COMPLEX_RATIONAL,
378 MPS_STRUCTURE_COMPLEX_FP,
379 MPS_STRUCTURE_COMPLEX_BIGFLOAT,
380 MPS_STRUCTURE_UNKNOWN
398 enum mps_output_format {
399 MPS_OUTPUT_FORMAT_COMPACT,
400 MPS_OUTPUT_FORMAT_GNUPLOT,
401 MPS_OUTPUT_FORMAT_GNUPLOT_FULL,
402 MPS_OUTPUT_FORMAT_BARE,
403 MPS_OUTPUT_FORMAT_FULL,
404 MPS_OUTPUT_FORMAT_VERBOSE
410 enum mps_output_goal {
411 MPS_OUTPUT_GOAL_ISOLATE,
412 MPS_OUTPUT_GOAL_APPROXIMATE,
413 MPS_OUTPUT_GOAL_COUNT
419 enum mps_search_set {
423 MPS_SEARCH_SET_COMPLEX_PLANE,
428 MPS_SEARCH_SET_POSITIVE_REAL_PART,
433 MPS_SEARCH_SET_NEGATIVE_REAL_PART,
438 MPS_SEARCH_SET_POSITIVE_IMAG_PART,
443 MPS_SEARCH_SET_NEGATIVE_IMAG_PART,
449 MPS_SEARCH_SET_UNITARY_DISC,
455 MPS_SEARCH_SET_UNITARY_DISC_COMPL,
470 MPS_SEARCH_SET_CUSTOM
476 enum mps_representation {
477 MPS_REPRESENTATION_SECULAR,
478 MPS_REPRESENTATION_MONOMIAL,
479 MPS_REPRESENTATION_CHEBYSHEV
485 enum mps_starting_strategy {
486 MPS_STARTING_STRATEGY_DEFAULT,
487 MPS_STARTING_STRATEGY_RECURSIVE,
488 MPS_STARTING_STRATEGY_FILE