LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
symbolic_number_order.cpp
浏览该文件的文档.
1
#include "
internal/symbolic_ast.hpp
"
2
3
namespace
LMCAS
{
4
namespace
{
5
6
template
<
typename
Number>
7
int
compare_values
(
const
Number& left,
const
Number&
right
) {
8
if
(left <
right
) {
9
return
-1;
10
}
11
if
(left ==
right
) {
12
return
0;
13
}
14
return
1;
15
}
16
17
int
compare_exact_to_rational
(
const
NumberNode
& left,
const
Rational&
right
) {
18
if
(
const
auto
*
rational
= std::get_if<Rational>(&left.
value
())) {
19
return
compare_values
(*
rational
,
right
);
20
}
21
return
compare_values
(Rational(std::get<BigInt>(left.
value
())),
right
);
22
}
23
24
int
compare_exact_nodes
(
const
NumberNode
& left,
const
NumberNode
&
right
) {
25
if
(
const
auto
*
rational
= std::get_if<Rational>(&
right
.value())) {
26
return
compare_exact_to_rational
(left, *
rational
);
27
}
28
if
(
const
auto
*
rational
= std::get_if<Rational>(&left.
value
())) {
29
return
-
compare_exact_to_rational
(
right
, *
rational
);
30
}
31
return
compare_values
(std::get<BigInt>(left.
value
()), std::get<BigInt>(
right
.value()));
32
}
33
34
}
35
36
int
NumberNode::compare_same_type
(
const
SymbolicNode
& other)
const
{
37
const
auto
&
right
=
static_cast<
const
NumberNode
&
>
(other);
38
return
compare_exact_nodes(*
this
,
right
);
39
}
40
41
bool
NumberNode::is_negative_one
()
const
{
42
if
(
const
auto
*
integer
= std::get_if<BigInt>(&
value_
)) {
43
const
auto
narrowed =
integer
->try_to_int64();
44
return
narrowed && *narrowed == -1;
45
}
46
return
std::get<Rational>(
value_
) == Rational(-1);
47
}
48
49
}
LMCAS::NumberNode
定义
numbers.hpp:8
LMCAS::NumberNode::compare_same_type
int compare_same_type(const SymbolicNode &other) const override
定义
symbolic_number_order.cpp:36
LMCAS::NumberNode::value
const std::variant< BigInt, Rational > & value() const noexcept
定义
numbers.hpp:21
LMCAS::NumberNode::NumberNode
NumberNode(const BigInt &v)
定义
numbers.hpp:14
LMCAS::NumberNode::value_
const std::variant< BigInt, Rational > value_
定义
numbers.hpp:12
LMCAS::NumberNode::is_negative_one
bool is_negative_one() const
定义
symbolic_number_order.cpp:41
LMCAS::SymbolicNode::SymbolicNode
SymbolicNode()=default
LMCAS::anonymous_namespace{symbolic_number_order.cpp}::compare_values
int compare_values(const Number &left, const Number &right)
定义
symbolic_number_order.cpp:7
LMCAS::anonymous_namespace{symbolic_number_order.cpp}::compare_exact_to_rational
int compare_exact_to_rational(const NumberNode &left, const Rational &right)
定义
symbolic_number_order.cpp:17
LMCAS::anonymous_namespace{symbolic_number_order.cpp}::compare_exact_nodes
int compare_exact_nodes(const NumberNode &left, const NumberNode &right)
定义
symbolic_number_order.cpp:24
LMCAS
定义
assumption.hpp:11
LMCAS::integer
ExprResult integer(Integer)=delete
LMCAS::right
const ExprPtr & right
定义
residual_verification.hpp:50
LMCAS::rational
ExprResult rational(const Rational &value)
定义
expr_values.cpp:82
symbolic_ast.hpp
内部 AST 定义。
src
symbolic_number_order.cpp
生成于
, 为 LMCAS使用
1.18.0