LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
expand_visitor.cpp
浏览该文件的文档.
1
#include "
internal/visitors/expand_visitor.hpp
"
2
#include "
internal/normalization_utils.hpp
"
3
4
namespace
LMCAS
{
5
6
void
ExpandVisitor::visit
(
const
PowerNode
& node) {
7
auto
&
context
=
rewrite_budget
()->
context
();
8
std::size_t size = 1;
9
auto
expanded_base =
expand_child
(node.base(), size);
10
auto
expanded_exponent =
expand_child
(node.exponent(), size);
11
const
auto
number = std::dynamic_pointer_cast<const NumberNode>(expanded_exponent);
12
BigInt
exponent
;
13
if
(
try_get_integer_value
(number,
exponent
)) {
14
if
(
exponent
.is_zero() &&
15
normalization_can_discard
(expanded_base,
detail::no_facts
(),
Domain::Real
,
context
) &&
16
normalization_proved
(
detail::query_nonzero_value
(expanded_base,
detail::no_facts
(),
Domain::Complex
,
context
))) {
17
set_result
(
detail::make_node<NumberNode>
(BigInt(1)), 1);
18
return
;
19
}
20
const
auto
count =
exponent
.try_to_uint64();
21
if
(count && *count > 0 && *count < 20) {
22
NormalizationVisitor
normalizer(*
rewrite_budget
(),
detail::no_facts
(),
Domain::Real
);
23
set_result
(expanded_base);
24
for
(std::uint64_t i = 1; i < *count; ++i) {
25
set_result
(normalizer.
expand_product
(
result
, expanded_base));
26
}
27
return
;
28
}
29
}
30
set_result
(
detail::make_node<PowerNode>
(expanded_base, expanded_exponent), size);
31
}
32
33
}
LMCAS::ExpandVisitor::visit
void visit(const NumberNode &node) override
定义
expand_visitor.hpp:20
LMCAS::ExpandVisitor::expand_child
std::shared_ptr< const SymbolicNode > expand_child(const std::shared_ptr< const SymbolicNode > &child, std::size_t &size)
定义
expand_visitor.hpp:243
LMCAS::ExpandVisitor::result
std::shared_ptr< const SymbolicNode > result
展开结果节点。
定义
expand_visitor.hpp:14
LMCAS::ExpandVisitor::set_result
void set_result(std::shared_ptr< const SymbolicNode > candidate, std::size_t size)
定义
expand_visitor.hpp:262
LMCAS::NormalizationVisitor
统一规范化数值幂。 精确操作数保留整数和有理数运算;近似求根要求指数精确等于 1/2。 有限浮点幂直接折叠,省去倒数中间值;非有限结果保留幂表达式。
定义
normalization_visitor.hpp:19
LMCAS::NormalizationVisitor::expand_product
std::shared_ptr< const SymbolicNode > expand_product(const std::shared_ptr< const SymbolicNode > &lhs, const std::shared_ptr< const SymbolicNode > &rhs)
定义
normalization_products.cpp:206
LMCAS::PowerNode
幂运算节点,表示 base^exponent。
定义
arithmetic.hpp:218
LMCAS::detail::RewriteBudget::context
ComputationContext & context() const noexcept
定义
rewrite_budget.hpp:24
LMCAS::detail::SymbolicVisitor::rewrite_budget
RewriteBudget * rewrite_budget() const noexcept
定义
base.hpp:220
expand_visitor.hpp
展开访问器,将乘积和幂展开为多项式形式。
LMCAS::detail::query_nonzero_value
Result< Tribool > query_nonzero_value(const Node &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
定义
facts_query.cpp:708
LMCAS::detail::no_facts
const FactsQuery & no_facts() noexcept
定义
facts_query_adapters.cpp:96
LMCAS::detail::make_node
std::shared_ptr< const Node > make_node(Args &&... args)
定义
base.hpp:123
LMCAS
定义
assumption.hpp:11
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
LMCAS::try_get_integer_value
bool try_get_integer_value(const std::shared_ptr< const NumberNode > &node, BigInt &value)
定义
normalization_utils.cpp:39
LMCAS::normalization_can_discard
bool normalization_can_discard(const std::shared_ptr< const SymbolicNode > &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
定义
normalization_utils.hpp:16
LMCAS::Domain::Complex
@ Complex
Complex numbers (default, least specific)
定义
assumption.hpp:16
LMCAS::Domain::Real
@ Real
Real numbers
定义
assumption.hpp:17
LMCAS::exponent
const ExprPtr & exponent
定义
expr.hpp:215
LMCAS::normalization_proved
bool normalization_proved(const Result< Tribool > &result)
定义
normalization_utils.hpp:12
normalization_utils.hpp
src
expand_visitor.cpp
生成于
, 为 LMCAS使用
1.18.0