mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
Added first FPA API functions.
Signed-off-by: Christoph M. Wintersteiger <cwinter@microsoft.com>
This commit is contained in:
parent
3f50750d1f
commit
9b13ca5260
|
@ -59,7 +59,7 @@ def init_project_def():
|
||||||
add_lib('ufbv_tactic', ['normal_forms', 'core_tactics', 'macros', 'smt_tactic', 'rewriter'], 'tactic/ufbv')
|
add_lib('ufbv_tactic', ['normal_forms', 'core_tactics', 'macros', 'smt_tactic', 'rewriter'], 'tactic/ufbv')
|
||||||
add_lib('portfolio', ['smtlogic_tactics', 'ufbv_tactic', 'fpa', 'aig_tactic', 'muz_qe', 'sls_tactic', 'subpaving_tactic'], 'tactic/portfolio')
|
add_lib('portfolio', ['smtlogic_tactics', 'ufbv_tactic', 'fpa', 'aig_tactic', 'muz_qe', 'sls_tactic', 'subpaving_tactic'], 'tactic/portfolio')
|
||||||
add_lib('smtparser', ['portfolio'], 'parsers/smt')
|
add_lib('smtparser', ['portfolio'], 'parsers/smt')
|
||||||
API_files = ['z3_api.h', 'z3_algebraic.h', 'z3_polynomial.h', 'z3_rcf.h']
|
API_files = ['z3_api.h', 'z3_algebraic.h', 'z3_polynomial.h', 'z3_rcf.h', 'z3_fpa.h']
|
||||||
add_lib('api', ['portfolio', 'user_plugin', 'smtparser', 'realclosure'],
|
add_lib('api', ['portfolio', 'user_plugin', 'smtparser', 'realclosure'],
|
||||||
includes2install=['z3.h', 'z3_v1.h', 'z3_macros.h'] + API_files)
|
includes2install=['z3.h', 'z3_v1.h', 'z3_macros.h'] + API_files)
|
||||||
add_exe('shell', ['api', 'sat', 'extra_cmds'], exe_name='z3')
|
add_exe('shell', ['api', 'sat', 'extra_cmds'], exe_name='z3')
|
||||||
|
|
107
src/api/api_fpa.cpp
Normal file
107
src/api/api_fpa.cpp
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2013 Microsoft Corporation
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
api_fpa.cpp
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
|
||||||
|
Author:
|
||||||
|
|
||||||
|
Christoph M. Wintersteiger (cwinter) 2013-06-05
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
--*/
|
||||||
|
#include<iostream>
|
||||||
|
#include"z3.h"
|
||||||
|
#include"api_log_macros.h"
|
||||||
|
#include"api_context.h"
|
||||||
|
#include"float_decl_plugin.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
Z3_sort Z3_API Z3_mk_fpa_rounding_mode_sort(Z3_context c) {
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_rounding_mode_sort(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_sort r = of_sort(float_util(ctx->m()).mk_rm_sort());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_even(__in Z3_context c)
|
||||||
|
{
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_round_nearest_ties_to_even(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_ast r = of_ast(float_util(ctx->m()).mk_round_nearest_ties_to_even());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_away(__in Z3_context c)
|
||||||
|
{
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_round_nearest_ties_to_even(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_ast r = of_ast(float_util(ctx->m()).mk_round_nearest_ties_to_away());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_positive(__in Z3_context c)
|
||||||
|
{
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_round_nearest_ties_to_even(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_ast r = of_ast(float_util(ctx->m()).mk_round_toward_positive());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_negative(__in Z3_context c)
|
||||||
|
{
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_round_nearest_ties_to_even(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_ast r = of_ast(float_util(ctx->m()).mk_round_toward_negative());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_zero(__in Z3_context c)
|
||||||
|
{
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_round_nearest_ties_to_even(c);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
Z3_ast r = of_ast(float_util(ctx->m()).mk_round_toward_zero());
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Z3_sort Z3_API Z3_mk_fpa_sort(Z3_context c, unsigned ebits, unsigned sbits) {
|
||||||
|
Z3_TRY;
|
||||||
|
LOG_Z3_mk_fpa_sort(c, ebits, sbits);
|
||||||
|
RESET_ERROR_CODE();
|
||||||
|
if (ebits < 2 || sbits < 3) {
|
||||||
|
SET_ERROR_CODE(Z3_INVALID_ARG);
|
||||||
|
}
|
||||||
|
api::context * ctx = mk_c(c);
|
||||||
|
float_util fu(ctx->m());
|
||||||
|
Z3_sort r = of_sort(fu.mk_float_sort(ebits, sbits));
|
||||||
|
RETURN_Z3(r);
|
||||||
|
Z3_CATCH_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
|
@ -27,6 +27,7 @@ Notes:
|
||||||
#include"z3_algebraic.h"
|
#include"z3_algebraic.h"
|
||||||
#include"z3_polynomial.h"
|
#include"z3_polynomial.h"
|
||||||
#include"z3_rcf.h"
|
#include"z3_rcf.h"
|
||||||
|
#include"z3_fpa.h"
|
||||||
|
|
||||||
#undef __in
|
#undef __in
|
||||||
#undef __out
|
#undef __out
|
||||||
|
|
82
src/api/z3_fpa.h
Normal file
82
src/api/z3_fpa.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2013 Microsoft Corporation
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
z3_fpa.h
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Additional APIs for floating-point arithmetic (FPA).
|
||||||
|
|
||||||
|
Author:
|
||||||
|
|
||||||
|
Christoph M. Wintersteiger (cwinter) 2013-06-05
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
--*/
|
||||||
|
#ifndef _Z3_FPA_H_
|
||||||
|
#define _Z3_FPA_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a rounding mode sort.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_rounding_mode_sort', SORT, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_sort Z3_API Z3_mk_fpa_rounding_mode_sort(__in Z3_context c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a numeral of rounding mode sort which represents the NearestTiesToEven rounding mode.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_round_nearest_ties_to_even', AST, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_even(__in Z3_context c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a numeral of rounding mode sort which represents the NearestTiesToAway rounding mode.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_round_nearest_ties_to_away', AST, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_away(__in Z3_context c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a numeral of rounding mode sort which represents the TowardPositive rounding mode.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_round_toward_positive', AST, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_positive(__in Z3_context c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a numeral of rounding mode sort which represents the TowardNegative rounding mode.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_round_toward_negative', AST, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_negative(__in Z3_context c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a numeral of rounding mode sort which represents the TowardZero rounding mode.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_round_toward_zero', AST, (_in(CONTEXT),))
|
||||||
|
*/
|
||||||
|
Z3_ast Z3_API Z3_mk_fpa_round_toward_zero(__in Z3_context c);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Create a floating point sort.
|
||||||
|
|
||||||
|
def_API('Z3_mk_fpa_sort', SORT, (_in(CONTEXT), _in(UINT), _in(UINT)))
|
||||||
|
|
||||||
|
\remark ebits must be larger than 1 and sbits must be larger than 2.
|
||||||
|
*/
|
||||||
|
Z3_sort Z3_API Z3_mk_fpa_sort(__in Z3_context c, __in unsigned ebits, __in unsigned sbits);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue