LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{symbolic_geometry_vector.cpp} 命名空间参考

函数

void accumulate_angle_product (double left, double right, double &dot, double &correction)
void rescale_angle_component (double magnitude, double &scale, double &norm_squared, double &dot, double &correction)
Result< double > symbolic_vector_finite_numeric (const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context, const std::string &operation)

函数说明

◆ accumulate_angle_product()

void LMCAS::anonymous_namespace{symbolic_geometry_vector.cpp}::accumulate_angle_product ( double left,
double right,
double & dot,
double & correction )

在文件 symbolic_geometry_vector.cpp 第 61 行定义.

63{
64 const double product = left * right;
65 const double corrected = product - correction;
66 const double next = dot + corrected;
67 correction = (next - dot) - corrected;
68 dot = next;
69}
const ExprPtr & right

引用了 accumulate_angle_product() , 以及 LMCAS::right.

被这些函数引用 accumulate_angle_product().

函数调用图:
这是这个函数的调用关系图:

◆ rescale_angle_component()

void LMCAS::anonymous_namespace{symbolic_geometry_vector.cpp}::rescale_angle_component ( double magnitude,
double & scale,
double & norm_squared,
double & dot,
double & correction )

在文件 symbolic_geometry_vector.cpp 第 49 行定义.

52{
53 if (magnitude <= scale) return;
54 const double ratio = scale == 0.0 ? 0.0 : scale / magnitude;
55 norm_squared *= ratio * ratio;
56 dot *= ratio;
57 correction *= ratio;
58 scale = magnitude;
59}

引用了 rescale_angle_component().

被这些函数引用 rescale_angle_component().

函数调用图:
这是这个函数的调用关系图:

◆ symbolic_vector_finite_numeric()

Result< double > LMCAS::anonymous_namespace{symbolic_geometry_vector.cpp}::symbolic_vector_finite_numeric ( const std::shared_ptr< SymbolicExpr > & expr,
ComputationContext & context,
const std::string & operation )

在文件 symbolic_geometry_vector.cpp 第 17 行定义.

21{
22 if (!expr || !LMCAS::detail::node(expr)) {
25 "numeric expression cannot be null",
26 operation);
27 }
28 auto evaluated = evaluate_numeric(*expr, NumericBindings{}, context);
29 if (!evaluated) {
30 if (evaluated.error().code == CasErrc::Cancelled ||
31 evaluated.error().code == CasErrc::ResourceLimit) {
32 return Result<double>::failure(evaluated.error());
33 }
36 "expression is not finite numeric in the supported domain",
37 operation);
38 }
39 if (!evaluated.value().is_finite() ||
40 !std::isfinite(evaluated.value().value)) {
43 "expression is not finite numeric in the supported domain",
44 operation);
45 }
46 return Result<double>::success(evaluated.value().value);
47}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< ApproxReal > evaluate_numeric(const SymbolicExpr &expression, const NumericBindings &bindings={})
std::unordered_map< std::string, double > NumericBindings

引用了 LMCAS::Cancelled, LMCAS::context, LMCAS::evaluate_numeric(), LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), LMCAS::NumericFailure, LMCAS::ResourceLimit, LMCAS::Result< T >::success() , 以及 symbolic_vector_finite_numeric().

被这些函数引用 symbolic_vector_finite_numeric().

函数调用图:
这是这个函数的调用关系图: