1
$\begingroup$

I have a fixed number $a$. Now using $a$ I need to construct a number $b$ such that $0.99\leq b\leq 1$. Is there any mathematical formulation of such a construction that looks random. The generation of such a number should be deterministic. can somebody hint at any algorithms

$\endgroup$
  • 2
    $\begingroup$ If you want it to look random, I'd go for something like $.995 +.005\times \sin \left(e^a\right)$ where you can replace $e^a$ with other functions to get the "look" you want. $\endgroup$ – lulu Feb 18 '18 at 20:13
  • 6
    $\begingroup$ .998413267543212 $\endgroup$ – Dan Piponi Feb 18 '18 at 21:16
  • 2
    $\begingroup$ What are you using this for? (There's a notable difference here between "this is an internal value in a video game" and "this is part of a cryptography scheme") $\endgroup$ – Milo Brandt Feb 19 '18 at 1:43
6
$\begingroup$

For example $\,b=0.99 + \dfrac{\sin^2(\lambda a)}{100}\,$, with $\,\lambda \in \mathbb{R}\,$ adjusted for the range of $\,a\,$.

$\endgroup$
  • $\begingroup$ What do you mean by range of a $\endgroup$ – Upstart Feb 18 '18 at 20:25
  • $\begingroup$ @Upstart You didn't say what values $\,a\,$ can take. If it's an arbitrary real number then you can leave $\,\lambda=1\,$ (or, in fact, choose any $\,\lambda \ne 0\,$). However, if $\,a \in [a_{min}, a_{max}]\,$ then you would probably choose $\,\lambda\,$ so that the argument of the $\,\sin\,$ covers many enough periods of $\,2 \pi\,$ as to make it look "random". $\endgroup$ – dxiv Feb 18 '18 at 20:30
  • $\begingroup$ Oh yes i do have a range $a\in [0,255]$ $\endgroup$ – Upstart Feb 18 '18 at 20:32
  • $\begingroup$ @Upstart $\,\lambda = 1\,$ is probably "good enough" for that range. You'll need to try some test runs and evaluate "good enough" for the particular purpose. $\endgroup$ – dxiv Feb 18 '18 at 20:35
  • $\begingroup$ With using just $\sin^2$ I would expect some patterns emerging yet. But maybe your sample of $[0, 255]$ is small enough to avoid that. $\endgroup$ – Alfe Feb 19 '18 at 10:34
9
$\begingroup$

The provided value, $a$, is your seed value.

The algorithm you want is a pseudo-random number generator (PRNG). Note that pseudo-random number generators are explicitly deterministic; they merely appear random.

Depending on how random you need it to look, you may want to use a cryptographically secure PRNG. Such an algorithm, if truly cryptographically secure, should pretty much look random as far as any human-like observer could tell (though its operation may be plain and obvious to super-human observers, e.g. advanced aliens or deities; can't do much there).

Most PRNG's are designed to produce a bit-array (a bunch of $\left\{0,~1\right\}$ values) given a seed. If $a$ is real $\left(a\in\mathbb{R}\right)$, then that bit-array may contain arbitrarily many bits. Typically, the bit-array's defined such that each bit is pseudo-unrelated to the others, such that can be assumed to be mutually independent.

Then, it's just a matter of mapping the bit-array to numeric values. You might do this by interpreting the bit array as a serialization of a binary real $\in{\left[0.9,1\right]}$.

$\endgroup$
7
$\begingroup$

What about $$0.99+\frac1{100(1+a^2)}?$$

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.