#include <z3.h>
// Create Float32 sort
Z3_sort float32 = Z3_mk_fpa_sort_32(ctx);
// Create custom float sort (11 exp, 53 sig = Float64)
Z3_sort custom = Z3_mk_fpa_sort(ctx, 11, 53);
// Rounding modes
Z3_ast rne = Z3_mk_fpa_rne(ctx);
Z3_ast rna = Z3_mk_fpa_rna(ctx);
Z3_ast rtp = Z3_mk_fpa_rtp(ctx);
Z3_ast rtn = Z3_mk_fpa_rtn(ctx);
Z3_ast rtz = Z3_mk_fpa_rtz(ctx);
// Create FP value from double
Z3_ast fp_val = Z3_mk_fpa_numeral_double(ctx, 3.14, float32);
// Operations
Z3_ast sum = Z3_mk_fpa_add(ctx, rne, x, y);
Z3_ast product = Z3_mk_fpa_mul(ctx, rne, x, y);
Z3_ast quotient = Z3_mk_fpa_div(ctx, rne, x, y);
Z3_ast root = Z3_mk_fpa_sqrt(ctx, rne, x);
// Comparisons
Z3_ast eq = Z3_mk_fpa_eq(ctx, x, y);
Z3_ast lt = Z3_mk_fpa_lt(ctx, x, y);
// Predicates
Z3_ast is_nan = Z3_mk_fpa_is_nan(ctx, x);
Z3_ast is_inf = Z3_mk_fpa_is_infinite(ctx, x);
// Special values
Z3_ast nan = Z3_mk_fpa_nan(ctx, float32);
Z3_ast pos_inf = Z3_mk_fpa_plus_infinity(ctx, float32);
Z3_ast neg_inf = Z3_mk_fpa_minus_infinity(ctx, float32);
Z3_ast pos_zero = Z3_mk_fpa_plus_zero(ctx, float32);
Z3_ast neg_zero = Z3_mk_fpa_minus_zero(ctx, float32);