Ultra 0.9.4
Loading...
Searching...
No Matches
de/primitive.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_DE_PRIMITIVE_H)
14#define ULTRA_DE_PRIMITIVE_H
15
16#include <string>
17
18#include "kernel/random.h"
19#include "kernel/terminal.h"
20
21namespace ultra::de
22{
23
35class real : public terminal
36{
37public:
42 explicit real(const interval<double> &i = {-1000.0, 1000.0},
44 : terminal("REAL", c), interval_(i)
45 {
46 }
47
48 [[nodiscard]] constexpr double min() const noexcept { return interval_.min; }
49 [[nodiscard]] constexpr double sup() const noexcept { return interval_.sup; }
50
51 [[nodiscard]] value_t instance() const final
52 { return random::element(interval_); }
53
54private:
55 const interval<double> interval_;
56};
57
58} // namespace ultra::de
59
60#endif // include guard
real(const interval< double > &i={-1000.0, 1000.0}, symbol::category_t c=symbol::undefined_category)
Definition de/primitive.h:42
value_t instance() const final
Definition de/primitive.h:51
static constexpr category_t undefined_category
Sentinel value indicating that the category has not yet been assigned.
Definition symbol.h:61
unsigned category_t
Definition symbol.h:55
Definition terminal.h:41
std::variant< D_VOID, D_INT, D_DOUBLE, D_STRING, const D_NULLARY *, D_ADDRESS, const D_VARIABLE *, D_IVECTOR > value_t
Definition value.h:54
std::ranges::range_reference_t< const C > element(const C &c)
Definition random.h:114
Definition interval.h:37