1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

[Tolk] Tolk v0.5.0 as FunC v0.5.0 could have been like

All changes from PR "FunC v0.5.0":
https://github.com/ton-blockchain/ton/pull/1026

Instead of developing FunC, we decided to fork it.
BTW, the first Tolk release will be v0.6,
a metaphor of FunC v0.5 that missed a chance to occur.
This commit is contained in:
tolk-vm 2024-10-31 10:54:05 +04:00
parent 82648ebd6a
commit ebbab54cda
No known key found for this signature in database
GPG key ID: 7905DD7FE0324B12
21 changed files with 1345 additions and 789 deletions

View file

@ -81,14 +81,14 @@ int fixed248::acot(int x) inline_ref;
;; random number uniformly distributed in [0..1)
;; fixed248 random();
int fixed248::random() impure inline;
int fixed248::random() inline;
;; random number with standard normal distribution (2100 gas on average)
;; fixed248 nrand();
int fixed248::nrand() impure inline;
int fixed248::nrand() inline;
;; generates a random number approximately distributed according to the standard normal distribution (1200 gas)
;; (fails chi-squared test, but it is shorter and faster than fixed248::nrand())
;; fixed248 nrand_fast();
int fixed248::nrand_fast() impure inline;
int fixed248::nrand_fast() inline;
-} ;; end (declarations)
@ -880,7 +880,7 @@ int fixed248::acot(int x) inline_ref {
;; generated by Kinderman--Monahan ratio method modified by J.Leva
;; spends ~ 2k..3k gas on average
;; fixed252 nrand();
int nrand_f252() impure inline_ref {
int nrand_f252() inline_ref {
var (x, s, t, A, B, r0) = (nan(), touch(29483) << 236, touch(-3167) << 239, 12845, 16693, 9043);
;; 4/sqrt(e*Pi) = 1.369 loop iterations on average
do {
@ -910,7 +910,7 @@ int nrand_f252() impure inline_ref {
;; generates a random number approximately distributed according to the standard normal distribution
;; much faster than nrand_f252(), should be suitable for most purposes when only several random numbers are needed
;; fixed252 nrand_fast();
int nrand_fast_f252() impure inline_ref {
int nrand_fast_f252() inline_ref {
int t = touch(-3) << 253; ;; -6. as fixed252
repeat (12) {
t += random() / 16; ;; add together 12 uniformly random numbers
@ -920,18 +920,18 @@ int nrand_fast_f252() impure inline_ref {
;; random number uniformly distributed in [0..1)
;; fixed248 random();
int fixed248::random() impure inline {
int fixed248::random() inline {
return random() >> 8;
}
;; random number with standard normal distribution
;; fixed248 nrand();
int fixed248::nrand() impure inline {
int fixed248::nrand() inline {
return nrand_f252() ~>> 4;
}
;; generates a random number approximately distributed according to the standard normal distribution
;; fixed248 nrand_fast();
int fixed248::nrand_fast() impure inline {
int fixed248::nrand_fast() inline {
return nrand_fast_f252() ~>> 4;
}

File diff suppressed because it is too large Load diff