pub struct RandFn;Trait Implementations§
Source§impl Function for RandFn
Returns a uniformly distributed pseudo-random number in the interval [0, 1).
impl Function for RandFn
Returns a uniformly distributed pseudo-random number in the interval [0, 1).
RAND is volatile and recalculates whenever dependent formulas recalculate.
§Remarks
- The result is always greater than or equal to
0and strictly less than1. - Because the function is volatile, repeated evaluations can return different values.
- The engine seeds randomness per evaluation context for reproducible execution flows.
§Examples
title: "RAND stays within bounds"
formula: "=LET(n, RAND(), AND(n>=0, n<1))"
expected: truetitle: "Derived integer bucket from RAND"
formula: "=LET(n, INT(RAND()*10), AND(n>=0, n<=9))"
expected: truerelated:
- RANDBETWEEN
- LET
- INT
faq:
- q: "Can RAND return the same value on every recalculation?"
a: "Not by default. RAND is volatile, so recalculation can produce a different sample each time."
- q: "If RAND is used twice in one formula, do both uses share one sample?"
a: "Only if you bind it once (for example with LET). Two separate RAND calls are two separate draws."
- q: "Why does RAND look deterministic in some engine runs?"
a: "Randomness is seeded per evaluation context, which keeps a run reproducible while still treating RAND as volatile across recalculations."[formualizer-docgen:schema:start] Name: RAND Type: RandFn Min args: 0 Max args: 0 Variadic: false Signature: RAND() Arg schema: [] Caps: VOLATILE [formualizer-docgen:schema:end]
fn name(&self) -> &'static str
fn min_args(&self) -> usize
Source§fn eval<'a, 'b, 'c>(
&self,
_args: &'c [ArgumentHandle<'a, 'b>],
ctx: &dyn FunctionContext<'b>,
) -> Result<CalcValue<'b>, ExcelError>
fn eval<'a, 'b, 'c>( &self, _args: &'c [ArgumentHandle<'a, 'b>], ctx: &dyn FunctionContext<'b>, ) -> Result<CalcValue<'b>, ExcelError>
The unified evaluation path. Read more
fn namespace(&self) -> &'static str
fn variadic(&self) -> bool
fn volatile(&self) -> bool
fn arg_schema(&self) -> &'static [ArgSchema]
Source§fn aliases(&self) -> &'static [&'static str]
fn aliases(&self) -> &'static [&'static str]
Optional list of additional alias names (case-insensitive) that should resolve to this
function. Default: empty slice. Implementors can override to expose legacy names.
Returned slice must have ’static lifetime (typically a static array reference).
fn function_salt(&self) -> u64
Source§fn eval_reference<'a, 'b, 'c>(
&self,
_args: &'c [ArgumentHandle<'a, 'b>],
_ctx: &dyn FunctionContext<'b>,
) -> Option<Result<ReferenceType, ExcelError>>
fn eval_reference<'a, 'b, 'c>( &self, _args: &'c [ArgumentHandle<'a, 'b>], _ctx: &dyn FunctionContext<'b>, ) -> Option<Result<ReferenceType, ExcelError>>
Optional reference result path. Only called by the interpreter/engine
when the callsite expects a reference (e.g., range combinators, by-ref
argument positions, or spill sources). Read more
Source§fn dispatch<'a, 'b, 'c>(
&self,
args: &'c [ArgumentHandle<'a, 'b>],
ctx: &dyn FunctionContext<'b>,
) -> Result<CalcValue<'b>, ExcelError>
fn dispatch<'a, 'b, 'c>( &self, args: &'c [ArgumentHandle<'a, 'b>], ctx: &dyn FunctionContext<'b>, ) -> Result<CalcValue<'b>, ExcelError>
Dispatch to the unified evaluation path with automatic argument validation.
Auto Trait Implementations§
impl Freeze for RandFn
impl RefUnwindSafe for RandFn
impl Send for RandFn
impl Sync for RandFn
impl Unpin for RandFn
impl UnsafeUnpin for RandFn
impl UnwindSafe for RandFn
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more