|
| 1 | +# !! DON'T CHANGE ANYTHING |
| 2 | +# |
| 3 | +# |
| 4 | +options: |
| 5 | + zeros: 45 # Amount of zeros for the program to use scientfic notation (limited at 183) |
| 6 | + |
| 7 | + |
| 8 | +on load: |
| 9 | + set {z} to {@zeros} |
| 10 | + if {z} > 183: |
| 11 | + set {z} to 183 |
| 12 | +function gte(n: string, n2: string) :: boolean: |
| 13 | + set {_n::*} to {_n} split at "e" |
| 14 | + set {_n2::*} to {_n2} split at "e" |
| 15 | + return true if {_n2::2} parsed as number < {_n::2} parsed as number |
| 16 | + return false if {_n2::2} parsed as number > {_n::2} parsed as number |
| 17 | + return true if {_n2::1} parsed as number <= {_n::1} parsed as number |
| 18 | + return false |
| 19 | +function tobignumber(n: number) :: string: |
| 20 | + return "%10^(log({_n})-floor(log({_n})))%e%floor(log({_n}))%" |
| 21 | +function privatetobignumberfromlog(n: number) :: string: |
| 22 | + return "%10^({_n}-floor({_n}))%e%floor({_n})%" |
| 23 | +function privateadd(n: string) :: string: |
| 24 | + set {_n::*} to split {_n} at "e" |
| 25 | + if {_n::2} parsed as number > 18: |
| 26 | + return "%{_n::1}%e%{_n::2}%" |
| 27 | + if {_n::2} parsed as number < -18: |
| 28 | + set {_n::1} to 1 |
| 29 | + set {_n::2} to 0 |
| 30 | + return "%{_n::1}%e%{_n::2}%" |
| 31 | + set {_n::1} to {_n::1} parsed as number+1/10^{_n::2} parsed as number |
| 32 | + if {_n::1} >= 10: |
| 33 | + set {_n::1} to {_n::1}/10 |
| 34 | + set {_n::2} to {_n::2} parsed as number+1 |
| 35 | + return "%{_n::1}%e%{_n::2}%" |
| 36 | +function biglog(n: string, b: number = 10) :: number: |
| 37 | + set {_n::*} to {_n} split at "e" |
| 38 | + return {_n::2} parsed as number*log(10, {_b})+log({_n::1} parsed as number, {_b}) |
| 39 | +function biglog2(n: string) :: number: |
| 40 | + return biglog({_n}, 2) |
| 41 | +function biglog3(n: string) :: number: |
| 42 | + return biglog({_n}, 3) |
| 43 | +function biglog5(n: string) :: number: |
| 44 | + return biglog({_n}, 5) |
| 45 | +function bigdiv(n: string, n2: string) :: string: |
| 46 | + set {_n::*} to {_n} split at "e" |
| 47 | + return "0e0" if {_n::1} parsed as number = 0 |
| 48 | + return privatetobignumberfromlog(biglog({_n})-biglog({_n2})) |
| 49 | +function bigmultiply(n: string, n2: string) :: string: |
| 50 | + set {_n2::*} to {_n2} split at "e" |
| 51 | + return "0e0" if {_n2::1} parsed as number = 0 |
| 52 | + set {_n::*} to {_n} split at "e" |
| 53 | + return "0e0" if {_n::1} parsed as number = 0 |
| 54 | + return privatetobignumberfromlog(biglog({_n})+biglog({_n2})) |
| 55 | +function privatebignumformat(n: number) :: text: |
| 56 | + set {_data} to "NQQGNT,180|OQQGNT,177|SPGNT,174|SXQGNT,171|QNQGNT,168|QDQGNT,165|QGNT,162|DQGNT,159|UQGNT,156|QQGNT,153|NQDDR,150|OQDDR,147|SPQDR,144|SXQDR,141|QNQDR,138|QDQDR,135|TQDR,132|DQDR,129|UQDR,126|QDDR,123|NOTG,120|OCTG,117|SPTG,114|SSTG,111|QNTG,108|QTTG,105|TSTG,102|DTG,99|UTG,96|TGN,93|NVG,90|OVG,87|SPG,84|SEV,81|QNV,78|QTV,75|TVG,72|DVG,69|UVGN,66|VGN,63|NVD,60|OCD,57|SPD,54|SXD,51|QND,48|QAD,45|TD,42|DD,39|UD,36|DE,33|N,30|O,27|SP,24|SX,21|QI,18|QA,15|T,12|B,9|M,6|K,3" |
| 57 | + loop split {_data} at "|": |
| 58 | + set {_s::*} to split loop-value at "," |
| 59 | + {_s::2} parsed as number < {z} |
| 60 | + {_n} >= 10 ^ {_s::2} parsed as number |
| 61 | + return "%(rounded down {_n} / 10 ^ {_s::2} parsed as number*100)/100%%{_s::1}%" |
| 62 | + return "%(rounded down {_n}*100)/100%" |
| 63 | +function bigformat(n: string) :: text: |
| 64 | + set {_n::*} to {_n} split at "e" |
| 65 | + if {_n::2} parsed as number <= {z}: |
| 66 | + return privatebignumformat({_n::1} parsed as number*10^{_n::2} parsed as number) |
| 67 | + else: |
| 68 | + return {_n} |
| 69 | +function bigadd(n: string, n2: string) :: string: |
| 70 | + set {_n::*} to {_n} split at "e" |
| 71 | + set {_n2::*} to {_n2} split at "e" |
| 72 | + return {_n} if {_n::2} parsed as number-{_n2::2} parsed as number >= 18 |
| 73 | + return {_n2} if {_n::2} parsed as number-{_n2::2} parsed as number <= -18 |
| 74 | + set {_n::1} to {_n::1} parsed as number+{_n2::1} parsed as number/10^({_n::2} parsed as number-{_n2::2} parsed as number) |
| 75 | + if {_n::1} >= 10: |
| 76 | + set {_n::1} to {_n::1}/10 |
| 77 | + set {_n::2} to {_n::2} parsed as number+1 |
| 78 | + if {_n::1} < 1: |
| 79 | + set {_n::1} to {_n::1} *10 |
| 80 | + set {_n::2} to {_n::2} parsed as number - 1 |
| 81 | + return "%{_n::1}%e%{_n::2}%" |
| 82 | +function bigremove(n: string, n2: string) :: string: |
| 83 | + set {_n::*} to {_n} split at "e" |
| 84 | + set {_n2::*} to {_n2} split at "e" |
| 85 | + return {_n} if {_n::2} parsed as number-{_n2::2} parsed as number >= 18 |
| 86 | + return "0e0" if {_n::1} parsed as number-{_n2::1} parsed as number/10^({_n::2} parsed as number-{_n2::2} parsed as number) < 0 |
| 87 | + set {_n::1} to {_n::1} parsed as number-{_n2::1} parsed as number/10^({_n::2} parsed as number-{_n2::2} parsed as number) |
| 88 | + if {_n::1} < 1: |
| 89 | + set {_n::1} to {_n::1} *10 |
| 90 | + set {_n::2} to {_n::2} parsed as number - 1 |
| 91 | + if {_n::1} >= 10: |
| 92 | + set {_n::1} to {_n::1}/10 |
| 93 | + set {_n::2} to {_n::2} parsed as number+1 |
| 94 | + return "%{_n::1}%e%{_n::2}%" |
| 95 | +function tonumber(n: string) :: number: |
| 96 | + return {_n} if {_n} = {_n} parsed as number |
| 97 | + set {_n::*} to split {_n} at "e" |
| 98 | + return {_n::1} parsed as number*10^{_n::2} parsed as number |
| 99 | +function bigpow(n: string, n2: number) :: string: |
| 100 | + return privatetobignumberfromlog({_n2}*biglog({_n})) |
| 101 | + |
| 102 | +# function list: |
| 103 | +# |
| 104 | +# gte({_n}, {_n2}), returns true if {_n} >= {_n2}, returns false if {_n} < {_n2} |
| 105 | +# |
| 106 | +# tobignumber(%number%), returns %number% in bignumber format |
| 107 | +# |
| 108 | +# biglog({_n}, %number%), returns log%number%({_n}) in number format |
| 109 | +# |
| 110 | +# bigdiv({_n}, {_n2}), returns {_n}/{_n2} in bignumber format |
| 111 | +# |
| 112 | +# bigmultiply({_n}, {_n2}), returns {_n}*{_n2} in bignumber format |
| 113 | +# |
| 114 | +# bigformat({_n}), returns a formatted version of {_n} using regular format up to zeros (configurable in options) zeros |
| 115 | +# |
| 116 | +# bigadd({_n}, {_n2}), returns {_n}+{_n2} in bignumber format |
| 117 | +# |
| 118 | +# bigremove({_n}, {_n2}), returns {_n}-{_n2} in bignumber format |
| 119 | +# |
| 120 | +# bigpow({_n}, %number%), returns {_n}^%regular number% in bignumber format |
| 121 | +# |
| 122 | + |
0 commit comments