diff --git a/Cargo.lock b/Cargo.lock index 2b7169f..16bfb0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -39,7 +39,7 @@ name = "backtrace-sys" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -50,7 +50,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cc" -version = "1.0.50" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -94,7 +94,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -110,7 +110,7 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", @@ -325,7 +325,7 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -348,7 +348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -437,14 +437,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" "checksum backtrace-sys 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" "checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" "checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" "checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" +"checksum hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4" "checksum hexf 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e54653cc32d838771a36532647afad59c4bf7155745eeeec406f71fd5d7e7538" "checksum hexf-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "22eadcfadba76a730b2764eaa577d045f35e0ef5174b9c5b46adf1ee42b85e12" "checksum hexf-parse 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "79296f72d53a89096cbc9a88c9547ee8dfe793388674620e2207593d370550ac" @@ -471,7 +471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" +"checksum syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" diff --git a/README.md b/README.md index 84a1203..47998bc 100644 --- a/README.md +++ b/README.md @@ -98,5 +98,31 @@ reduces the program; check if the reduced program still fails on the test, and i given program with the reduced one; repeat until you get a small enough buggy program. For more information, we refer to the [Creduce](https://embed.cs.utah.edu/creduce/) homepage. -**[NOTICE]** The fuzzer supports Ubuntu 18.04 only. It may work for other platforms, but if it -doesn't, please run the fuzzer in Ubuntu 18.04. +**[NOTICE]** The fuzzer supports Ubuntu 18.04 or 20.04 only. It may work for other platforms, but if it +doesn't, please run the fuzzer in Ubuntu 18.04 or 20.04. + + +## Running RISC-V Binaries + +### Install + +```sh +# Ubuntu 20.04 or higher +apt install gcc-10-riscv64-linux-gnu qemu-user-static +``` + +### Cross-Compilation and Architecture-Emulation + +```sh +# Compile C source code into RISC-V assembly +riscv64-linux-gnu-gcc-10 hello.c -S -o hello.S + +# Link to an RISC-V executable +riscv64-linux-gnu-gcc-10 -static hello.S -o hello + +# Emulate the executable +qemu-riscv64-static ./hello + +# Check the return value +echo $? +``` diff --git a/examples/c/float.c b/examples/c/float.c new file mode 100644 index 0000000..d8f50ac --- /dev/null +++ b/examples/c/float.c @@ -0,0 +1,35 @@ +double custom_abs(double a) { + return a < 0 ? -a : a; +} + +double custom_max(double a, double b) { + return a > b ? a : b; +} + +int is_close(double a, double b, double rel_tol, double abs_tol) { + return custom_abs(a - b) <= custom_max(rel_tol * custom_max(custom_abs(a), custom_abs(b)), abs_tol); +} + +double average(int len, int a[10]) { + int sum = 0; + int i; + + for(i = 0; i < len; i++) { + sum += a[i]; + } + + return (double) sum / len; +} + +int main() { + int a[10]; + int len = 10; + + for (int i = 0; i < len; i++) { + a[i] = i; + } + + float avg = average(len, a); + + return is_close(avg, 4.5, 1e-09, 0.1); +} diff --git a/examples/c/float2.c b/examples/c/float2.c new file mode 100644 index 0000000..95a679a --- /dev/null +++ b/examples/c/float2.c @@ -0,0 +1,3205 @@ +double func_0() +{ + float a = -0.05068116821797983; + double b = 0.1300852687485195f; + double c = -0.2358076240617986; + float d = 0.6641848290176688; + float e = -1.1549382423569812; + double f = -0.09326438429669882; + double g = 2.215800195719119f; + float h = 0.9015691302796454f; + float i = 1.0305929860878253f; + double j = 1.6341219196997319f; + float k = -0.8982077157835295; + double l = -0.6727253779879557; + float m = -0.23291367125343232f; + double n = -0.463904118983923; + float o = -0.9632770863951208f; + double p = 0.56437528267115f; + float q = 0.3432406982203581; + double r = -0.3480624987679216f; + float s = -0.9020880009659189f; + double t = -1.4495712702485886; + float u = -1.9463635009455609; + double v = 1.5564327401737514; + float w = 1.306527483443752; + double x = -0.9012829271271358f; + double y = -1.4481354224640028f; + float z = -0.3943416581251447f; + float A = 1.6275622821038302f; + return (A / (z + (y / (x - (w / (v / (u * (t / (s / (r + (q * (p * (o + (n - (m / (l + (k / (j * (i + (h - (g / (f + (e / (d * (c - (b - a)))))))))))))))))))))))))); +} + +float func_1() +{ + double a = -1.2729294607926438; + float b = 1.1212470600422157; + float c = -1.2837435779407056f; + double d = -0.13542250028196315; + float e = -0.084730710985957f; + double f = 0.6672216380469931; + float g = 0.5756514596850792f; + float h = -1.709416353354038; + float i = -0.26101054400471224f; + double j = 0.8218382570232328; + float k = -0.5941233631759764; + double l = -1.259338703000699; + float m = -0.6675779867859255f; + float n = -0.26657685334640485; + double o = -1.4271665845887604f; + float p = 0.6974943580619225; + double q = -0.32977502026272704f; + float r = 1.3128782239609762f; + double s = -1.821404575895115; + float t = -0.5553281812506569; + float u = 0.3220421597324721f; + float v = 1.3870283993790427; + double w = 0.30136493467157716; + float x = -0.24982190480860245; + float y = -0.9083559899721844f; + double z = 0.08227627217210565f; + double A = -0.5370911092713568; + return (A + (z / (y * (x + (w - (v - (u / (t * (s / (r * (q * (p + (o / (n - (m / (l + (k + (j + (i / (h + (g / (f - (e + (d * (c * (b + a)))))))))))))))))))))))))); +} + +double func_2() +{ + double a = 0.13859004515793455f; + float b = -1.240773986687762f; + float c = -2.264278155793524; + float d = 1.2385429258531724; + float e = -0.25631395100546583f; + float f = 1.269904342498404; + float g = -0.038827526387627743f; + double h = 0.2810584934439527f; + double i = -1.4440024946755254f; + float j = -1.621477376417931f; + float k = 0.6983995218569031f; + double l = 0.14396660485189622; + float m = -1.9477902465487618; + double n = -0.488691622443364f; + double o = -0.4937276132182824; + float p = -2.063832661528462f; + float q = 0.11030053788962356; + float r = 0.013376470726762645; + double s = -0.6366780010932019; + double t = 0.2621943434271917; + float u = -0.5943093979117834; + float v = -0.08638681662422686f; + float w = -0.028809123872194347f; + double x = 0.8611191355441928; + float y = -0.3583337747291952; + float z = -0.2096900133715971f; + float A = -0.27230349064594794f; + return (A * (z - (y * (x / (w / (v - (u * (t + (s / (r + (q - (p / (o + (n * (m - (l * (k - (j - (i - (h * (g / (f * (e * (d - (c / (b - a)))))))))))))))))))))))))); +} + +double func_3() +{ + double a = -0.11135258199369127; + double b = 0.8833729041388854f; + float c = 0.3734078353529487f; + float d = 0.7031085830485346f; + double e = -0.6849380666724654f; + float f = 0.10383165427792453f; + float g = -0.8387052280156264; + double h = -0.15105218843378146; + float i = 1.1297036093662274f; + double j = -1.9436463479650032; + double k = 0.8044118609719809f; + float l = -0.5181159082431982; + double m = 1.4246633053413778; + float n = 1.0599208628146453f; + double o = -1.8436803781765252; + float p = 1.5449292463940507; + float q = 0.6690474857588121f; + double r = -0.15625769510449197f; + float s = -0.3600665937126263; + double t = 1.2278827683202356; + double u = -0.04100907181893295f; + float v = 0.19348990994657553f; + float w = -0.14961861788907033; + float x = -0.39099337836060577f; + double y = 1.6536362469629222; + float z = -0.0263549536805546; + double A = 0.15520600074683827f; + return (A * (z + (y * (x / (w + (v - (u * (t + (s + (r * (q * (p + (o / (n * (m * (l + (k + (j * (i / (h * (g / (f / (e + (d + (c + (b / a)))))))))))))))))))))))))); +} + +double func_4() +{ + float a = 0.5756624074065967f; + double b = -0.2003330315154117; + double c = 1.0556007352938936; + float d = -0.9797703533471448; + double e = 0.9203068537680132f; + float f = -0.534526610641598f; + double g = 1.3513096937283173f; + float h = 1.6634033062817464f; + double i = 0.9560804287255872f; + double j = 0.4408598041672526; + float k = 0.21094167460178223; + double l = -0.2788650391234351; + float m = 1.4390665913697822; + double n = 0.04150806230163239; + double o = 0.17556448202431066f; + double p = -0.4887458531252902f; + double q = -0.9230476615034131f; + float r = 1.061128722389458f; + float s = 1.6189666712315327f; + double t = -0.087876755630503; + float u = 0.9418153687185421; + float v = 0.49561637205845593; + float w = 0.12697435335579868; + double x = -0.3969170224171651f; + double y = -1.974130953766816f; + float z = -0.49069750657773975f; + float A = 1.4533550797084251f; + return (A / (z - (y - (x + (w - (v / (u * (t / (s * (r / (q + (p + (o * (n + (m * (l / (k - (j * (i - (h / (g - (f / (e + (d - (c - (b / a)))))))))))))))))))))))))); +} + +float func_5() +{ + double a = 0.011962982481201784f; + double b = 0.5026425806078056; + float c = -0.13491812669296116; + double d = -0.4553038790249746; + double e = -0.4961610985895531; + double f = -1.544737997400013f; + float g = 0.9234442907423114; + double h = 0.17407921793148687; + float i = 1.8866650191780958; + double j = -0.20505572573197528; + float k = -0.07441392243545328f; + double l = -0.3339737118733094f; + float m = -1.6426650235387426; + float n = 0.7026375408889908; + double o = 0.024437301552288904f; + double p = -0.14263618222325905; + double q = 2.4105825168908246f; + double r = 0.9903698898986507; + double s = -0.9372652697306767; + float t = 0.5305324712758823; + double u = 0.49057534095462585f; + double v = 0.4341264233219793f; + float w = -2.046128910482592; + float x = -0.044331929525380634f; + float y = -0.032875621682279976; + float z = -0.11430282541271686; + float A = -0.6955619436431625f; + return (A / (z + (y / (x - (w * (v * (u * (t / (s / (r - (q * (p + (o + (n + (m * (l * (k + (j + (i - (h / (g - (f / (e + (d * (c - (b * a)))))))))))))))))))))))))); +} + +double func_6() +{ + float a = -0.3056832026566796; + double b = 1.2180245320678769; + double c = 0.5606932025943147f; + float d = -1.2703956673058188; + double e = 0.7262873097705977; + double f = -0.04129951304566364; + double g = -0.6411656749923308f; + float h = -1.0176276016611738f; + float i = -2.683519121491003f; + double j = 0.4086135849822528f; + double k = -0.9265360851779428; + float l = 0.24298614420524486f; + double m = -0.6637019899183616; + float n = 0.8339227800212059f; + double o = 0.41940083999171607f; + float p = -0.4928358964253952f; + float q = -1.2918785391653673f; + float r = 1.3205366131278817; + float s = -0.19897882857550755f; + double t = -0.7752332034093813; + double u = -0.5427786783023806f; + double v = -0.20537823493578072; + float w = -1.5371085222509924; + float x = 0.9596676084763498; + double y = 1.1959330422528134; + double z = -0.9850825099238957; + double A = 0.3910569971813735f; + return (A / (z * (y * (x + (w + (v - (u / (t + (s / (r / (q - (p / (o + (n * (m + (l - (k - (j + (i * (h / (g * (f / (e / (d - (c - (b - a)))))))))))))))))))))))))); +} + +double func_7() +{ + float a = -0.45241853055275294f; + double b = -0.2518249027616052; + float c = 1.84163936704276; + double d = 0.7851307856440185; + double e = -0.44561387681177117f; + double f = 1.469124983236246f; + double g = -1.6652204558314312f; + float h = 0.3415861232314445f; + float i = 1.425821872315094; + double j = -0.28498582483930823f; + float k = -1.503985181824283; + float l = -0.25669383111357724; + float m = -0.22942958920594983; + float n = -0.46651208546013695f; + double o = -0.9098337400760471f; + float p = 0.5133098554833224; + float q = 0.012403666113556451f; + float r = -1.2761135843015907f; + float s = 0.42545589553648006; + double t = 1.471092291050029f; + double u = -1.208989205187913; + double v = 0.06751785607842797f; + double w = -0.6476946095047429f; + double x = 0.9365284336875647f; + double y = 0.920084335012746; + double z = -0.1663064471401636f; + double A = 0.677307490800361; + return (A - (z / (y * (x + (w - (v + (u * (t / (s - (r * (q + (p / (o + (n * (m - (l + (k / (j + (i * (h + (g * (f * (e + (d - (c - (b * a)))))))))))))))))))))))))); +} + +double func_8() +{ + double a = -0.7469385043752238f; + float b = -0.06423437675543983f; + double c = -1.3639319543963935; + float d = 1.1559134394453605; + float e = -0.142275333683498f; + double f = -0.6582964960951373f; + double g = 1.224077574998698f; + double h = -1.3805228692148792f; + double i = -1.099301624790373; + double j = -1.6454993228542782f; + float k = 0.16547982184344992f; + double l = -0.27996151086700416f; + double m = 1.131324329981153; + double n = -2.300919674350784; + double o = 0.8444775425353163f; + float p = 0.27054443025838937; + float q = -0.6657433438855179f; + double r = 0.40506971476540926f; + double s = 0.6264969301281638; + float t = 0.4269456068203647f; + float u = -2.046603892536287; + double v = 0.1884722120454257; + double w = -0.9255837206205881f; + float x = 0.26040234210382135; + float y = -0.6049860199462499; + float z = 1.4627875783794342f; + float A = 0.36978870691579124f; + return (A / (z + (y + (x / (w + (v * (u + (t - (s * (r / (q / (p / (o / (n / (m * (l + (k - (j + (i + (h * (g - (f * (e + (d / (c / (b / a)))))))))))))))))))))))))); +} + +float func_9() +{ + float a = 0.595557121909576; + double b = -0.20174335831329784; + float c = 0.2543264148200971f; + float d = -0.6459433272807563f; + float e = -0.022562816339128627f; + float f = -0.7967038973761129f; + float g = 1.3304234224842408; + float h = -1.9742088875272987f; + double i = -0.48441301848621476; + float j = -1.8096666804043788f; + float k = -0.8490306340101151f; + double l = -0.004652423586373228f; + double m = -0.17630479213375247f; + double n = 0.6014084255009488f; + double o = 1.7620721077028074f; + float p = 1.5485931192581726; + double q = -0.011227310639105223f; + float r = -2.1593491541512293; + double s = -0.18117553105993925f; + double t = -0.22349871020219325; + double u = -1.8910078278761862; + double v = -1.5743854356052056f; + float w = 0.8296655927525411f; + float x = 0.14557569754572697; + double y = -0.32502454927904634f; + double z = 0.8494466592971889f; + double A = 1.8460244091502425; + return (A - (z + (y + (x + (w - (v / (u / (t * (s / (r * (q - (p + (o * (n / (m * (l + (k * (j * (i / (h / (g * (f / (e / (d - (c - (b / a)))))))))))))))))))))))))); +} + +float func_10() +{ + float a = 1.6548211376997404; + float b = 1.5025702488640298; + double c = 0.004448482477131152f; + float d = -0.513312432789283f; + double e = 2.3033479624797106; + float f = -0.81160624527968; + float g = 0.1371813255549237f; + double h = -0.7748628217786463f; + float i = -0.5831939330235886; + float j = 0.9147298522271945f; + float k = 0.30157346702810334; + double l = -0.8831342143839179; + double m = 2.022704581051876f; + double n = 0.000335332752326952; + double o = 0.6512855298005609; + double p = -0.7979227540953051; + float q = -1.403976822704024f; + float r = 0.9475921873307226; + double s = 0.03554880863644319f; + float t = -1.1997934727127972; + double u = -0.36259833462003277; + double v = 0.5955975702124395f; + double w = 0.7652927912392696f; + double x = -0.7330361569753777f; + double y = 0.3442605025155422f; + double z = -0.01450624804847235f; + float A = -0.5551006512161066; + return (A - (z - (y / (x * (w / (v / (u / (t * (s * (r + (q + (p / (o / (n - (m - (l * (k * (j + (i / (h / (g + (f + (e + (d * (c + (b * a)))))))))))))))))))))))))); +} + +double func_11() +{ + double a = -1.8071988635365146; + double b = 0.8900111678358542f; + double c = 0.09575214293419898f; + double d = -0.07619873628747728f; + float e = 0.5347100172316717; + float f = 1.8411364579716698; + double g = 1.8785950146375707f; + double h = 0.2812155763800083f; + double i = 1.4666325658319002; + double j = 0.00930403213503074; + double k = 1.0935481281298773f; + float l = 0.3191209847159398; + float m = -1.8269565568577124f; + double n = -2.057614869098871; + double o = -2.2832797662599686f; + double p = -1.444200004464235; + float q = -0.28881358882024816; + float r = 0.7166000812459118; + float s = -0.6891020150373677; + double t = 0.9362518419237905f; + float u = 1.3392948956992814f; + float v = 0.3385848382485487f; + double w = 0.447019289945245; + double x = -0.8620075624927922; + double y = -1.9903602148322113f; + float z = 0.9190038400523105f; + float A = -0.4139994176414773f; + return (A + (z * (y - (x + (w / (v / (u * (t - (s * (r / (q + (p + (o + (n + (m * (l - (k / (j / (i * (h - (g - (f + (e + (d - (c + (b + a)))))))))))))))))))))))))); +} + +double func_12() +{ + float a = -0.31882055931609204; + double b = -0.2889830170018167; + float c = 0.1375602403998815; + float d = 1.0401629388682418f; + double e = 0.32990939719762485; + float f = 0.4869209053536684f; + double g = -0.017115639064183886f; + double h = 0.6759130933259774f; + float i = 2.5128123150878476; + double j = 0.10472519783506849; + double k = -0.6413513693574511; + double l = 0.8855074613566818; + float m = 0.6732469845876637f; + float n = -0.8951277568294859f; + float o = 1.4324208355224286; + double p = -1.784996397408722; + float q = 0.1004242592257954; + float r = 0.8987488949772887; + float s = 0.17560053563007602; + double t = -1.751663789288027; + double u = -0.945354842513466f; + double v = -2.459843015280767; + double w = 0.20224664662017638; + double x = -0.4043569201100374f; + double y = -0.0960667676279734f; + float z = 1.4408892654579315; + float A = 1.5619515770579808; + return (A * (z / (y * (x / (w - (v - (u * (t - (s * (r / (q - (p / (o + (n / (m / (l + (k * (j * (i * (h - (g / (f / (e + (d / (c * (b * a)))))))))))))))))))))))))); +} + +float func_13() +{ + float a = -0.08350380501493265f; + float b = 0.515095217048532f; + float c = -1.1887012019177685f; + double d = 1.1729471536415985; + double e = -0.40844408516280784f; + double f = -0.30452840356003424; + double g = -0.17090413069366797; + float h = -0.46037141206113635f; + double i = -0.7127840483022652; + float j = 1.1837874000979896f; + float k = -0.39217927396664065f; + double l = 0.1052785437856937; + double m = 0.46510326511138245f; + float n = 0.9417903069736935f; + double o = -0.46367019986435054f; + double p = 0.30705036410902314f; + float q = -0.28025978260250245f; + double r = 1.3645954277266878f; + double s = 1.1258649836592647f; + double t = -0.7454528016833256f; + float u = 0.2760080440130327f; + float v = 0.5304506943778682f; + double w = -0.18521694194653238f; + double x = 1.5192471269204464; + double y = 0.8961922741239486f; + double z = -0.40136751312318597; + double A = -2.416868674165454f; + return (A + (z / (y + (x + (w - (v * (u * (t / (s * (r / (q * (p / (o * (n + (m / (l - (k - (j - (i + (h + (g * (f / (e * (d * (c - (b * a)))))))))))))))))))))))))); +} + +float func_14() +{ + float a = -0.542720081051726f; + float b = 0.2121192244345509; + float c = 1.6665352629107513; + float d = -0.8810770914836288; + double e = -0.9106933783314873f; + double f = -0.516753016114227f; + double g = 0.20439461374485446f; + double h = 0.2560311412101614f; + double i = -1.5141000192066971; + float j = -0.7861335477501775; + float k = 1.920275122958886f; + float l = -0.7591673929483813; + float m = -0.8609260724590402f; + double n = 0.2924395756231358; + float o = -0.9522655115701676; + double p = -0.8330853937195276f; + double q = -0.1026958028129415f; + float r = 0.8524076073791316; + double s = 0.8994296696777248; + float t = -0.6515821332249822f; + float u = 0.3258304853801497f; + float v = -0.03253659530680822f; + double w = 1.414652968568076; + double x = -1.083208965336175f; + float y = -0.8848340956509699; + double z = 0.7750085490572225f; + float A = -0.03556898911346878f; + return (A * (z * (y + (x * (w - (v / (u * (t - (s - (r - (q - (p * (o + (n / (m - (l * (k / (j + (i - (h + (g / (f * (e * (d * (c / (b * a)))))))))))))))))))))))))); +} + +float func_15() +{ + float a = 1.1178772395069532; + double b = -0.1658450599735137; + double c = -0.2403504071891102f; + double d = 0.1409524158243949f; + double e = 0.5565122369206406; + float f = -1.8600587599272937f; + float g = -0.29588919197713487; + double h = -0.6117207992647558; + float i = -1.235553832316118f; + float j = 0.9907053466965298; + float k = 0.3005653272192202f; + double l = 1.0367100336687713f; + double m = -1.8979592954041447f; + float n = -0.647621160121899f; + float o = -0.8091388904190653f; + double p = 0.6988528970627668f; + float q = -0.5259981567270533f; + float r = 0.4657433791299171; + float s = -1.400189482135202f; + float t = -0.24705186781500896; + double u = 0.6462215231146418; + double v = -1.055863276657855; + float w = 0.342885107479676; + float x = 0.1669724435010134; + double y = 0.8674700779633973f; + double z = 0.254397513658918f; + float A = -0.11577261159156432; + return (A - (z * (y / (x + (w + (v + (u * (t - (s * (r - (q / (p / (o - (n / (m - (l + (k / (j * (i * (h - (g + (f / (e - (d + (c - (b / a)))))))))))))))))))))))))); +} + +double func_16() +{ + float a = -0.6989580965294305; + float b = 0.31263975817981077; + double c = 0.4828217785073997; + float d = -0.8806390353459793f; + float e = -0.5272440340753234f; + double f = 0.627702428923484; + double g = -0.5601565425513465; + double h = -0.18508978612541302f; + double i = 0.3643003972082503f; + float j = -0.4429763869726111; + double k = -1.4870775301558026f; + float l = 0.8060944854876317f; + float m = -0.12196604995190738f; + float n = 1.868434090666543f; + float o = -0.14465551171649368; + float p = -0.9887149677499858f; + float q = 0.009106143785986828f; + float r = -1.753369185357171; + double s = -1.9837582593759528f; + float t = -1.086427882444903f; + float u = 1.863788516413425; + double v = 0.4872620356926059f; + double w = 0.9493002341880294f; + float x = 0.15004734804895759f; + float y = -0.595313538777254f; + float z = 1.0406397917562338; + float A = -1.4745473699554865; + return (A - (z - (y * (x / (w - (v / (u / (t / (s * (r / (q + (p + (o / (n + (m / (l / (k / (j - (i + (h - (g * (f - (e * (d + (c / (b / a)))))))))))))))))))))))))); +} + +double func_17() +{ + double a = 0.9751461187619557; + double b = -0.9427072733533728; + double c = -0.0027541125202792537f; + float d = -0.0799799871692173f; + float e = 1.2775797754442082f; + double f = 1.0311450062726706f; + float g = 0.06026087051401525f; + double h = -0.4590525863623264; + float i = 0.1804561962118893f; + float j = -2.381161779949423; + double k = -3.2840846809370015f; + double l = 0.05452580143181755f; + float m = 1.7152447420025854f; + double n = 0.21064160868165052; + double o = 0.3030540502630817; + float p = -0.5566168152704289; + float q = -0.3882595238248062f; + float r = -1.0683195936915257f; + double s = 1.2559108327920405f; + double t = -0.1652532008533727f; + double u = 0.052409901039459465f; + double v = -0.023223535372973492f; + double w = -0.5028325039058202f; + float x = -0.6726564548072222; + double y = -0.35117513261034417; + float z = -0.06301665398824265f; + double A = -0.5128650566753352; + return (A / (z - (y / (x - (w - (v * (u / (t * (s * (r + (q * (p * (o - (n + (m * (l + (k - (j + (i - (h / (g / (f + (e / (d - (c - (b + a)))))))))))))))))))))))))); +} + +float func_18() +{ + double a = 0.8209321974650098f; + float b = -0.39484537563442906; + double c = -0.23794390363385037f; + double d = -0.8539753671898506; + double e = -0.7180228531492526; + float f = 0.07423273971182162; + float g = 1.0058873379594702f; + float h = -0.8299168585520941; + float i = -0.8066283312446265f; + double j = 0.933097573920884f; + float k = -0.36256527273564443; + double l = -0.17855799272938375; + double m = -2.234950471864579f; + double n = 0.9626813957388595; + double o = 1.5508013233756175; + float p = -0.2467947501976894f; + double q = 0.6990377080479669; + double r = -0.9200419414468394f; + double s = -0.5081018565768813f; + float t = -0.6728545053559465; + float u = 0.2664524593135174; + float v = 1.0740682705278333; + double w = -0.4295472132045099f; + double x = 0.5951871853814331f; + float y = 1.0745017915615056f; + double z = -1.0552434735161897; + double A = 0.5440895662041281; + return (A / (z + (y / (x / (w - (v / (u * (t + (s - (r * (q * (p - (o / (n / (m - (l * (k + (j * (i * (h * (g * (f / (e * (d * (c * (b / a)))))))))))))))))))))))))); +} + +float func_19() +{ + float a = 0.6304389551058128; + double b = 1.2815880001531068f; + double c = -0.4590227009191825; + double d = 0.8349635784459573; + float e = -0.05526490963133275f; + float f = -0.7998735676629654f; + float g = -0.23606553714689962f; + double h = -1.5354474824022506f; + float i = 1.2772925102473778; + double j = -1.3371233219566083f; + double k = 0.0796776560036148f; + float l = 0.6068350895408668f; + float m = -0.12843504828015692f; + float n = -1.457140684025367f; + float o = 1.0453066780940126; + double p = 0.10425566470724859; + float q = -0.5365592522501662; + double r = 0.8761368919247247; + double s = 0.0045232801585454625; + double t = -0.8216794151384089; + double u = 0.9724548944118651; + float v = 1.0863002668702961f; + float w = 1.0857094040565447; + double x = 1.6431120900802323; + double y = -0.8006147854734795f; + double z = -0.377560355909877f; + float A = 0.6563469887455361; + return (A * (z * (y - (x + (w / (v + (u / (t + (s / (r / (q / (p * (o + (n - (m / (l - (k + (j + (i * (h + (g - (f + (e * (d - (c / (b / a)))))))))))))))))))))))))); +} + +float func_20() +{ + double a = 0.021449937761176114; + float b = -0.888219913705934; + float c = 0.5913179346027574; + float d = 1.2874442522226568; + double e = -0.3892918023166281f; + float f = -0.2931740406605674f; + double g = 0.10292799421189228; + double h = -0.5571343279152902; + double i = 1.417019348266649f; + double j = 0.7137808222117805; + double k = 0.6276551761650119; + double l = -0.22102082919858787; + float m = -0.0826426937498809f; + float n = 1.9195140250182476f; + double o = 0.01687598588169238f; + float p = 1.024188656992096f; + float q = -1.8100493826300428; + double r = -1.4574996907647693f; + float s = 0.46979657758372245; + double t = 1.8044167317761393f; + double u = -0.986865864219636; + float v = -2.084755120525305f; + float w = -1.7534218161673971f; + float x = 0.1207111873196057; + double y = 2.0219193282460015; + double z = -3.0402492720109815f; + double A = 0.532155428917712f; + return (A * (z - (y / (x + (w + (v * (u + (t - (s / (r / (q * (p + (o * (n - (m + (l - (k / (j - (i * (h + (g / (f - (e * (d / (c - (b * a)))))))))))))))))))))))))); +} + +float func_21() +{ + float a = 1.2388193170219433; + float b = -0.40528489769587106; + double c = 0.444782077021509; + double d = -0.8306296528250783f; + float e = 0.6172117710667345; + double f = 2.2525022018157927; + double g = -1.4900022930605292f; + double h = -0.31588575350572384; + double i = -1.154645802345001f; + float j = 2.230894716996422f; + double k = -0.5566234732941897; + double l = 1.1295897474597794f; + float m = 1.793639651582429; + double n = -0.18802978548251256; + double o = 1.343351988543549; + float p = 1.5389588761338961; + float q = 0.8172947518414605f; + float r = 1.803757691330336; + double s = -0.6333865265120044; + double t = -2.285119934471364; + float u = 1.0729849344482174f; + double v = 0.5154450859064301; + double w = 1.0227939396953123f; + double x = -1.2437728688561742; + float y = 1.1790418977732666f; + float z = -0.6964504774465545f; + float A = 0.8817423472381622; + return (A + (z / (y / (x + (w * (v * (u * (t - (s * (r + (q + (p + (o * (n + (m - (l * (k + (j * (i + (h / (g + (f - (e - (d / (c * (b * a)))))))))))))))))))))))))); +} + +double func_22() +{ + float a = 0.05202415327780414f; + double b = -1.1859837058317173f; + double c = 0.1398434664406157f; + float d = 0.5013152595930128; + double e = -0.617199163735618f; + float f = -0.37720252515604435; + float g = 0.03741966569087665; + float h = 0.5483359650257803; + double i = -0.3830915940998251f; + double j = -0.30345990170431825; + float k = -1.038537604391642f; + float l = -0.6509996388117897f; + float m = -2.6876536607913915f; + float n = 1.6744157715740806f; + float o = 0.14333827242327746f; + double p = -0.7086859586455376f; + float q = 0.13601643395103588; + float r = -0.5074030221917762; + float s = -1.0608662000228783f; + float t = -0.3798698772581661; + double u = -1.1861455543316664f; + float v = -0.3730605042161089; + double w = -1.842508638900267f; + float x = 0.8321646596413688; + float y = -0.5945199452001634; + float z = -0.6929513404566079f; + double A = 0.6701697260793785; + return (A * (z - (y * (x - (w + (v / (u * (t * (s * (r - (q + (p + (o + (n + (m * (l + (k - (j * (i * (h / (g - (f - (e - (d + (c / (b / a)))))))))))))))))))))))))); +} + +float func_23() +{ + double a = -0.3275739582184067; + float b = 0.24138971112510682; + double c = -0.6900159232390126f; + float d = 0.14624672643888786; + double e = 0.7624708966900088; + double f = 1.0642178556029784f; + float g = 0.019773815125302286f; + double h = -0.5680986110570929; + double i = 1.5602109999465787; + float j = -0.8220195534891025f; + double k = -0.014683285948783504; + float l = -1.2093802208252749f; + float m = -0.3580066215519568; + float n = 0.3424906415790115f; + float o = 1.341892994922558; + float p = 0.3821029301124818f; + float q = -0.4470961443020414; + float r = 1.5813721858945988f; + float s = -0.3361020417497451f; + float t = -0.6424361547534423; + double u = -0.06282766085003302; + double v = -0.09993010709682953; + double w = 1.1276569929442928; + double x = -0.9088109311219597; + double y = 1.3799287401594558f; + double z = 0.60982863825065; + float A = -1.2551755748142701; + return (A - (z * (y / (x - (w / (v + (u * (t * (s / (r * (q * (p - (o - (n + (m + (l / (k - (j - (i + (h - (g / (f * (e + (d + (c * (b * a)))))))))))))))))))))))))); +} + +double func_24() +{ + double a = 0.49695442104112547f; + float b = -1.411474973568024f; + float c = 0.39815603002350214f; + float d = -1.3181409244264963; + double e = -0.2093517189738017; + float f = 0.6191234220931091f; + float g = 0.6991847911768984; + double h = 0.7562110526387846f; + float i = 0.8710029445177567f; + double j = -0.9151943023572314; + double k = 1.0087450630370172; + double l = 0.5308955451405655f; + float m = 0.05381949618553177; + double n = 1.5305936953949262f; + float o = -0.9271624292937638f; + double p = 0.7406755058957469f; + double q = -1.585817627056002f; + double r = 0.8986720840422113; + float s = 1.3767185893374942; + double t = -0.10927265960740697f; + float u = 1.6810863869128534f; + double v = -1.4283619938091658f; + double w = -1.3734958344487387f; + double x = 0.2885285443574205f; + float y = -0.2659901930365825f; + double z = -0.15835887484913844; + float A = -0.5253114687301242f; + return (A * (z / (y * (x + (w / (v / (u / (t * (s - (r - (q / (p / (o * (n * (m - (l - (k - (j + (i + (h * (g - (f - (e / (d / (c / (b * a)))))))))))))))))))))))))); +} + +float func_25() +{ + float a = 0.9944935972792602; + float b = -0.11264238897428762; + double c = -0.6794481345815457; + float d = 0.7584587445628017; + float e = -1.02054687467954f; + double f = -0.3036866011119455; + double g = -0.7420666380723886; + double h = -1.8589450438240787; + double i = 0.2784484587249343f; + double j = -0.9989261320978312f; + float k = 0.1392700275870934; + float l = -0.7099907706877248f; + float m = -0.4765478118562893; + double n = 0.91527733566704f; + float o = -0.2320511141481128; + double p = 0.6621421018363801f; + double q = -1.3696142257158443; + double r = -1.878790037521523; + double s = -0.01891695684414013; + float t = -1.4270855160562366f; + float u = -0.21467885837104758; + float v = 0.0750095035397319; + double w = 0.16626825135519857f; + double x = 0.22961256079308176; + float y = -0.5909584482317922f; + float z = 0.8339105469455329; + float A = -1.6970487876083555f; + return (A * (z * (y - (x * (w * (v / (u + (t - (s / (r + (q - (p * (o + (n - (m - (l + (k / (j / (i + (h - (g + (f * (e + (d * (c - (b * a)))))))))))))))))))))))))); +} + +float func_26() +{ + double a = -0.6217649588593068; + float b = 0.5508491711243507f; + float c = -1.1687481284283645f; + float d = -0.6278415501358743f; + float e = 1.0798278981292158; + double f = -0.8779254765050118f; + double g = -2.141532686868965; + float h = -0.7018720607555898; + float i = 2.3119361680539585f; + float j = -0.09356040579205999; + float k = -0.9395343475429256f; + double l = 0.15859996893366873f; + float m = 0.8488202694375785; + double n = 1.4047504876052728f; + float o = 1.2350220198947435; + double p = 0.4525721858592567f; + double q = 0.5112998416036655; + float r = -0.15452964178085904f; + float s = 0.5093908784326421; + double t = -0.7586571549753797; + float u = 1.0441233371373213f; + float v = 0.1412955983738993; + float w = 1.8704995422362622; + double x = 1.0663385155436926f; + float y = -1.6990047557379175; + double z = 1.5982812741406487; + double A = -0.036392500206134756f; + return (A / (z / (y * (x * (w - (v * (u - (t / (s * (r * (q / (p + (o - (n / (m * (l + (k / (j * (i + (h * (g - (f + (e - (d * (c * (b * a)))))))))))))))))))))))))); +} + +double func_27() +{ + double a = 0.7102152593990149f; + float b = 0.6146754802368833; + double c = 1.2023045907894452; + float d = 0.30089147621552126; + double e = 0.923673760852353; + float f = 0.5517593050494626; + float g = 0.8714615168614455; + double h = -1.945036000888657f; + double i = -0.9701174540959394f; + double j = -0.04046594014647329f; + float k = -0.09204813310930199; + double l = -1.0450766365308155f; + double m = 1.3536263886914919f; + double n = 0.7510534328992267f; + double o = -1.11986159227157; + float p = 0.27485941522099144f; + double q = -0.7391672519631349f; + float r = -0.30870037704121306f; + double s = -0.6524935914175617f; + float t = -1.5028498944877766f; + float u = 0.00940296172787637; + float v = 0.5311744231192844; + double w = 1.3992712700494152f; + double x = 0.08942150138387862; + double y = 0.6231977078300143; + double z = -1.175335014642517; + float A = -1.1969844236700893f; + return (A - (z * (y + (x / (w + (v - (u * (t / (s / (r - (q / (p / (o / (n - (m + (l - (k + (j * (i / (h * (g - (f + (e * (d / (c * (b * a)))))))))))))))))))))))))); +} + +float func_28() +{ + double a = 0.9418025672522142; + float b = -0.7129461888717196f; + float c = -2.4569713721374256f; + double d = 0.958636315374105f; + float e = -2.487087091505326f; + float f = -0.27440848221843706; + double g = 0.6673284527707605f; + float h = -1.9667440744848677f; + double i = 0.3926461512961943; + float j = -1.6112827880182725; + float k = 1.4600878042723393f; + float l = 2.1538305568696594f; + float m = -0.07767286064943275f; + double n = -0.9405218892263f; + float o = 0.16142903008668655; + double p = -2.224761500148741; + double q = 0.6198029734765027; + float r = -0.6785753534645272; + float s = -1.5125517364382035; + float t = -0.6854381219375317f; + float u = 1.5479493156471884; + float v = 0.14326669903129743; + double w = -1.1575659436391599f; + double x = -1.2188009072409902; + double y = 1.2304865420244118; + double z = 0.8140042922085428; + float A = -2.663546288365318f; + return (A / (z * (y * (x / (w + (v / (u * (t + (s * (r + (q - (p + (o - (n / (m - (l * (k - (j - (i - (h + (g - (f / (e + (d + (c / (b * a)))))))))))))))))))))))))); +} + +float func_29() +{ + float a = 2.10993137102087f; + double b = 0.6504053291310382f; + double c = 1.6094662119703143; + float d = 0.8718833068192281; + float e = 0.5186282065377138; + double f = 0.4679014728607137; + float g = 2.1426028392744954; + double h = 0.5051436758018173; + float i = -0.26879987414258893f; + float j = -0.09703652847821986; + double k = -1.2068165586572832; + float l = -0.4534106851292913f; + float m = -0.5959147514446647f; + double n = -0.7063415606650713; + double o = 0.2967402283034558f; + float p = 1.2791850046342275f; + double q = 0.6435551998399925f; + float r = 0.40604634334796225; + float s = 1.1573487148693082; + float t = 0.22786850368300351; + double u = -0.22265511327083098f; + float v = -0.9443822718691516; + double w = 0.2412370785073249; + float x = 1.5272938382016192; + float y = -0.6978720373001756; + double z = 0.6292948237773888f; + float A = -0.6276200505860347f; + return (A - (z - (y * (x / (w - (v / (u / (t * (s / (r - (q * (p / (o / (n / (m / (l / (k - (j * (i * (h / (g + (f / (e / (d * (c + (b + a)))))))))))))))))))))))))); +} + +double func_30() +{ + float a = -1.124601203571466f; + float b = -0.11761113206165733f; + float c = 0.7915043589478276f; + float d = 0.3875705785824997f; + float e = -0.29505189552073124; + double f = -1.725304004721914f; + double g = -0.5852905578755456f; + double h = -0.22608380094411676f; + float i = -1.0945836046940822f; + float j = 0.6876363619319099; + double k = 1.4956693000834445f; + double l = 1.4314062955155216; + double m = 0.24575477227537862; + float n = 0.585305932821185; + float o = 1.0581160255345403f; + double p = 0.3291631302243024; + double q = -0.09973493317060918; + float r = -0.6999737868314188; + float s = 0.6434243007052969; + float t = 1.5301197086536746; + double u = 1.1223200923544414f; + float v = -0.5834924827868879; + double w = -0.6259179740617993f; + double x = 0.461292795811764; + double y = 1.058542526598024; + float z = -0.7314083385332167; + double A = -1.3492068111083253; + return (A - (z / (y * (x / (w - (v - (u + (t * (s - (r / (q - (p - (o / (n * (m / (l + (k / (j + (i + (h + (g + (f * (e + (d + (c - (b / a)))))))))))))))))))))))))); +} + +double func_31() +{ + double a = 2.6324040581382615f; + double b = -0.9601661838494714; + float c = 0.8587879529072349; + float d = -0.250803435684139; + float e = -0.06138095245003213; + float f = -1.283810246067627; + float g = 1.566937258100043f; + float h = 1.6529844970958065; + double i = -0.23428192282405433; + double j = -2.6352343445029396f; + float k = -0.014337980298277604f; + double l = 1.0159061604706632f; + float m = -2.669901112125756f; + float n = -0.3088873320009632; + float o = -1.0113276170263574; + double p = -2.1768742409151947; + float q = 0.24378866192161003; + float r = -0.0560994295975504; + float s = -0.18909864591343986; + float t = -0.17832452053751366f; + double u = 0.871706609016378f; + double v = -0.10199441480349627; + float w = 2.093122732321605; + float x = 0.5617771394133733f; + double y = -0.08076892074326825; + double z = -0.47614406052654357; + float A = -0.7317933575245275; + return (A / (z * (y + (x * (w - (v * (u - (t + (s + (r * (q + (p + (o / (n * (m + (l + (k + (j - (i - (h - (g * (f * (e * (d + (c * (b + a)))))))))))))))))))))))))); +} + +double func_32() +{ + float a = 1.0126069253410321; + double b = 1.293615080609041; + float c = -1.1093152096047638f; + double d = 0.47825152878113114f; + double e = -0.12319581327039289; + double f = 0.5821668454441138; + double g = 0.8209713301450299f; + float h = 2.517608863234461; + double i = 0.40876778059582763f; + float j = 0.05012905812430824; + float k = -0.22076614688388446; + double l = 2.0976387480692034f; + float m = -1.6797154584952392; + double n = 0.8597698700884949f; + float o = 0.18773327185765634f; + double p = 1.9855595290644907f; + float q = -0.2855246683122624; + double r = -2.2220137747531283f; + double s = -1.1213589139549884; + float t = -1.9032096516378918; + double u = -0.4139873617198722; + double v = 0.16630271920207873f; + double w = 0.7819109369413751; + double x = -0.8992655869010348; + double y = 1.3358458559504298f; + float z = -0.2677841964782371; + float A = 0.7312883772986772f; + return (A - (z - (y - (x * (w / (v - (u * (t * (s / (r + (q - (p + (o - (n + (m + (l + (k * (j / (i - (h - (g - (f * (e - (d + (c + (b * a)))))))))))))))))))))))))); +} + +double func_33() +{ + double a = 0.5537729806511571f; + float b = 0.7778673229242439; + float c = 0.9737210001404045f; + float d = 0.08542507864522744; + double e = -1.565668700580165f; + double f = -1.5414228352340686; + float g = 0.3997143781658321; + double h = 0.046874510997463925f; + float i = -0.1634317313339686f; + double j = 0.207664493333534f; + float k = -0.7175756460486642f; + double l = -0.12293796159413463; + double m = -0.9047679521520867; + double n = 0.7697725798121706f; + double o = -2.163758404141855f; + double p = -0.5987584855815946f; + double q = -1.751059627226394f; + double r = -1.7371701262815906f; + double s = -0.43379536053114387f; + double t = -0.06608177074584483; + float u = -0.8174963937931533f; + double v = -1.5085636169987109f; + double w = 1.0159094206178414f; + float x = 0.5790140512231102f; + double y = 0.5880256982059282; + float z = 1.7179643968842044; + double A = 2.0347458131311975f; + return (A / (z + (y + (x * (w * (v * (u + (t / (s + (r * (q * (p * (o * (n * (m / (l * (k * (j / (i - (h + (g * (f * (e + (d * (c - (b * a)))))))))))))))))))))))))); +} + +double func_34() +{ + double a = -0.10036059873648906; + double b = -2.6943750498208945f; + float c = 0.6518098019616863; + float d = -1.627347842374607; + double e = 0.709462668644767f; + float f = -0.41967527020792217; + float g = 0.0070648200451688395; + double h = 0.04668092768740959f; + double i = -0.8988599890932039; + float j = 1.8156290354976379; + double k = 0.10235783245942714f; + double l = -0.39396758365293527; + double m = 1.116221357942986f; + double n = 0.034308165304746764; + double o = 0.3141143913199233; + float p = 1.2144308214591972f; + double q = -0.2494706377462713; + float r = 1.3707598285359703; + float s = 0.6002239370899582; + double t = -0.2620829830041125f; + double u = 0.6979010268926025; + float v = -0.7074213513063098; + float w = -0.20812693517262854f; + float x = -1.2154190336358135f; + float y = 0.8495084121051188f; + double z = 0.4574914948212698; + double A = 1.154358636304218; + return (A * (z * (y - (x - (w + (v - (u + (t / (s / (r - (q + (p * (o + (n / (m / (l / (k + (j - (i * (h / (g * (f - (e - (d + (c * (b * a)))))))))))))))))))))))))); +} + +float func_35() +{ + double a = 0.5195662011130968; + float b = 0.6540363879535152; + float c = 0.06503430182127751f; + float d = -0.6159567500696547; + float e = -0.1697541436398104f; + double f = 0.03464292798830447; + double g = -1.583153199302874; + double h = -0.6061830557278615f; + double i = -0.22354339158786937; + float j = -1.1390331775648106f; + float k = 0.4105662499367891; + float l = 0.2927873323781633; + double m = 0.4594137576950027f; + float n = -1.3057789572054208; + double o = -1.0560016147717803; + float p = -0.3301235737703588f; + float q = -0.6365496505242342; + float r = -2.14316011639882f; + float s = 3.3742033572707966f; + float t = 1.3447407955796005; + double u = 0.4400791248319109; + double v = -0.5133235958951368f; + double w = 0.2447363488173544f; + double x = -0.4120030924181361f; + float y = -0.007093021386544899f; + double z = 0.7586625120432797; + float A = 0.3388027536515053f; + return (A * (z * (y + (x / (w * (v * (u * (t * (s + (r * (q * (p * (o * (n * (m / (l * (k * (j * (i - (h + (g * (f * (e + (d * (c * (b + a)))))))))))))))))))))))))); +} + +float func_36() +{ + float a = -0.6102446833824303f; + double b = 0.3731904553013442; + double c = 0.16736930553086274f; + float d = 1.0987639556667361; + float e = 0.06838299288847674f; + float f = -1.1677603982985738f; + double g = -0.13870258924872336; + double h = -1.5680924781074692; + float i = -1.0257509940439493; + float j = 0.5194938120952755; + float k = 1.4409677151772755; + double l = 0.9797271837820389f; + double m = 0.5715960231130823f; + double n = 2.432532408060386f; + double o = -1.0605493173445142f; + float p = -0.6651379096729644f; + float q = -0.00536906909062679; + float r = -0.6853945070489424f; + float s = 0.23831049446433594; + double t = -1.1927701189955806f; + float u = 0.48816575023937514f; + double v = 2.193016212388389f; + double w = -1.5297296844418573f; + double x = -0.2850475770809861f; + double y = -0.5580583602580759; + float z = -0.5893716910658535; + float A = 0.7387988453078218; + return (A + (z * (y + (x / (w + (v + (u * (t + (s - (r + (q * (p / (o / (n * (m + (l / (k + (j / (i * (h * (g / (f * (e / (d / (c / (b + a)))))))))))))))))))))))))); +} + +double func_37() +{ + double a = 0.3708270781953062; + double b = -0.5624668710522515; + double c = -0.9409658345872896; + double d = -0.6060510177726427; + float e = -0.462693253302641; + double f = -1.8904318133676847; + double g = -1.778953666603766; + float h = -0.8300980303590411; + float i = -1.1938038096137984; + double j = 1.1293070328209942f; + float k = 0.712893273907186f; + double l = 1.1266615728231697f; + float m = -0.6872601994621146f; + float n = 0.7911401200297277; + double o = -0.8468697931084886; + double p = -1.2026754372381465f; + float q = 1.2935878448507767f; + double r = 0.5625885359761807f; + float s = 0.4810766122670062f; + double t = -1.374279182113205f; + double u = -1.1058233299560352f; + double v = 1.5571963175429313f; + double w = -0.6209263420397333f; + float x = 1.3710957102319357f; + double y = 0.4940162272602531f; + float z = -0.37173304912795047f; + double A = -0.2931277148580529; + return (A * (z * (y * (x * (w * (v * (u - (t / (s - (r * (q * (p - (o + (n * (m / (l * (k + (j - (i - (h - (g / (f - (e - (d / (c + (b / a)))))))))))))))))))))))))); +} + +float func_38() +{ + float a = -1.6799822022949402; + float b = -1.2087476150117757f; + double c = -0.48903181565444886; + double d = -1.0464812281506615f; + double e = -1.8220722408928418; + double f = 0.645544102826357; + double g = 0.4015876669658708f; + double h = 0.563803404994728; + float i = -0.13617777520893493; + float j = 0.45942924728734447; + double k = 0.917687234459946f; + double l = -0.6917043437779559f; + double m = -0.8750082464830236f; + double n = 0.47239168307105733; + float o = -1.1032245630811344f; + double p = 0.8028536071353302f; + float q = 1.2273220234259286; + float r = 0.05833101238644188; + float s = -0.10893061746279138f; + double t = 1.407277407954942f; + float u = -1.9328150804178916f; + double v = 0.24599590276449448; + double w = 1.6320009484479796; + float x = -0.058003072985609166; + double y = -2.1164128817696257; + double z = 1.4973331538889125f; + float A = 0.7605882097495615f; + return (A + (z - (y / (x - (w - (v + (u / (t * (s * (r / (q * (p * (o * (n + (m + (l / (k + (j - (i - (h - (g / (f / (e + (d - (c * (b / a)))))))))))))))))))))))))); +} + +double func_39() +{ + double a = -0.5317978824272029; + float b = 0.1032590355067981; + float c = 1.2495103876951528f; + float d = 0.4021734688753852f; + double e = 1.4916658229872286; + float f = -0.17123294649828727f; + float g = 0.39025413825816285f; + float h = -0.614887922665143; + double i = 1.2283289822087025; + float j = 0.20775328329073647; + float k = 1.4837503556561862f; + double l = 0.18031949052217947f; + float m = -0.625346243469592f; + float n = -1.0174193250448729f; + double o = -0.425092280782355; + float p = 0.4584309288140947; + double q = 0.1105701837932762; + double r = 0.5540850407320203f; + double s = -0.15649199377368658f; + double t = 0.7263240482686926f; + float u = 0.5202328541540469f; + double v = 2.0499198570328896f; + double w = -0.6915599945118944; + float x = 0.10388093647917128; + double y = 1.4343866881616696f; + float z = -1.5777746410747384f; + float A = -0.6347569680540152; + return (A + (z - (y - (x + (w - (v - (u / (t - (s / (r * (q + (p - (o / (n - (m + (l * (k + (j - (i + (h - (g + (f - (e + (d / (c / (b + a)))))))))))))))))))))))))); +} + +float func_40() +{ + float a = -1.2974403726403345; + float b = 0.9628153041408175; + double c = -2.41697074466427; + float d = 0.6424519593983578; + double e = -0.36314098540394957f; + float f = -0.8992264062774442; + double g = -0.1284221925051922; + double h = 0.7393308357171419f; + double i = 0.09401211572540107; + double j = -0.15448020283733713; + float k = 0.2660557964834614; + float l = -1.8449788369662534; + float m = 0.6763557459411755; + double n = 0.17047122261419964f; + double o = 0.9385743461515222; + float p = 0.4844456679672212f; + double q = -0.2727917036703578; + double r = -1.2676266861233985; + float s = 0.8583936868464704f; + double t = 2.549396741024128; + double u = -0.6619652964777281; + double v = -0.18834670650560953; + float w = 0.47464438369986195; + float x = -1.0288808048057054f; + double y = -0.876982286471056f; + float z = 0.7009917051116324; + float A = 2.0137413152651122f; + return (A + (z * (y * (x * (w + (v - (u / (t - (s * (r + (q / (p * (o * (n * (m * (l + (k + (j / (i / (h / (g * (f + (e / (d - (c / (b - a)))))))))))))))))))))))))); +} + +double func_41() +{ + double a = -0.03417632022971495f; + float b = -0.09947255326913497f; + float c = 1.0054293450080896; + double d = 1.3591503732005323f; + double e = 0.10868438971157533f; + float f = 0.6057234432594184f; + float g = 0.970683713324258; + float h = -0.43824989983480944f; + double i = -0.6336785834494388; + double j = 0.37087175442642756; + double k = -0.7426482256762795; + double l = 0.0608696339012429; + double m = -1.2939893329032373f; + float n = 0.536963224475659f; + float o = 0.7133285824647048; + float p = 0.10116546222062567f; + double q = 1.8917494791693004f; + float r = 1.9149169480131791f; + float s = 0.49686743510670484f; + float t = -1.1706367277663403; + float u = -0.4296597195539954f; + float v = -0.6010198717566496f; + double w = 1.1317414072319063f; + float x = 0.14192620468781242; + float y = 0.5033688387907049; + float z = 1.266103816750444f; + double A = 0.5914566860423388; + return (A + (z / (y * (x / (w * (v + (u / (t / (s / (r * (q + (p + (o * (n - (m - (l * (k - (j * (i * (h + (g - (f * (e + (d - (c * (b + a)))))))))))))))))))))))))); +} + +double func_42() +{ + float a = 0.14607317825370034f; + double b = 0.7140883942540245f; + float c = -2.0534249381691483; + float d = 0.9245491268260849f; + float e = -0.3741593229876337; + double f = -0.050748612593155995f; + double g = -0.016789804511040455; + float h = -0.4759256012736251f; + double i = -0.8412648068623227f; + double j = 1.5147669854701336; + float k = -1.243282171575172f; + double l = 0.9736759475344697f; + float m = -1.16993189400993f; + double n = 0.23155252049247352; + float o = 0.48466100368919496f; + float p = 0.9809062365687589; + double q = 0.5252140587658015f; + double r = -0.17868315553094996f; + float s = 1.1437777985846067; + double t = -1.8024661893462022; + float u = 0.10693969673687505; + float v = -0.4323112552348689; + float w = -0.0045367227230986755f; + double x = 0.11563127374056777; + float y = 0.03508872180091757; + double z = -0.03568097255048709f; + double A = -0.5182136652166838; + return (A / (z - (y - (x - (w / (v * (u * (t * (s / (r * (q * (p + (o - (n / (m / (l / (k - (j - (i * (h - (g * (f - (e * (d - (c * (b / a)))))))))))))))))))))))))); +} + +float func_43() +{ + double a = -1.440384472219177f; + double b = 0.33422736878953996f; + float c = -0.09770475586133293f; + float d = 0.2775331070305732f; + float e = 0.28527448166874303; + float f = 0.36094127161465883; + float g = 0.3506218666354691f; + float h = 0.1165277317243032f; + double i = -0.13694489303023352f; + double j = -0.6076170552079482; + double k = 0.6400209144907725f; + double l = 0.33634649019670393; + float m = -0.36182144925546156; + float n = -0.7759685419143995; + double o = 0.5302767543678437; + float p = -0.047402290309048065f; + double q = -0.4594881019319348; + double r = -0.24044006187121614f; + double s = -2.1743395447165237f; + float t = -0.7703270456924287; + float u = 0.30428242236471104f; + float v = 0.3070019132188591; + float w = -0.7766678447915936f; + float x = 0.12575155431621662; + float y = -0.7539262150799841f; + double z = 0.9891462439401392f; + float A = -2.669656818289413f; + return (A - (z * (y / (x - (w - (v - (u + (t / (s + (r + (q + (p + (o - (n * (m - (l - (k / (j * (i + (h / (g - (f + (e / (d / (c - (b / a)))))))))))))))))))))))))); +} + +float func_44() +{ + float a = -0.857674624170461; + double b = -0.8393147924702292f; + float c = -0.18370614432178023f; + double d = -0.172746098696545; + float e = -0.5160303588585163; + double f = 1.1480317731151461; + double g = 0.6807179856499384; + float h = -1.401995116318101; + double i = -0.42876993843810657f; + float j = -0.009269171236822644f; + float k = 0.45411663819789216; + float l = -0.09157546670722995f; + double m = 0.4160050987195967f; + float n = -0.5043538711980201f; + double o = 1.2798232967416758f; + float p = -0.6144608980163018; + float q = 1.6049951393729531; + double r = -0.567656846126658; + double s = -1.1698441291739696f; + double t = 0.9304935904862961f; + double u = -0.15472067075330243; + float v = -0.755010917627936; + float w = 1.7812576918412488; + double x = 0.8103022980935642f; + float y = -0.5240409133522915; + float z = 0.5427643852361816; + double A = 0.15478079461286123f; + return (A / (z - (y * (x / (w / (v - (u * (t / (s / (r / (q + (p - (o * (n + (m / (l * (k + (j + (i * (h - (g - (f - (e / (d - (c - (b / a)))))))))))))))))))))))))); +} + +float func_45() +{ + float a = 0.7523753666676481; + double b = 0.6821135156196726; + float c = 0.5284086928291509f; + float d = -1.3533374297892722; + float e = 0.4947289403419759f; + float f = 0.7203697397194997f; + double g = 0.42810609592223325; + float h = 1.7079023485079023; + float i = -0.8062723886221015; + float j = -0.2614521088398897; + float k = -0.8128880295139711f; + float l = 1.698727391082858; + double m = 3.0511220686291662f; + float n = 0.43930740114866457; + float o = 0.7500020925644033; + float p = -0.6845025784834393; + double q = 1.4368691297434266f; + double r = 0.6691412737949798; + float s = 0.528683767241368f; + double t = 0.42836248869259064f; + double u = -0.3312100578807878f; + float v = -0.3315133940934174; + float w = -0.5330719078914644f; + float x = 0.5451205733169873; + float y = 0.5903831485390469; + double z = -2.585152317558944f; + double A = 1.4362087895699598; + return (A + (z - (y * (x - (w + (v + (u - (t - (s / (r / (q / (p * (o - (n + (m / (l - (k - (j / (i + (h + (g - (f / (e - (d / (c - (b - a)))))))))))))))))))))))))); +} + +float func_46() +{ + double a = -0.2966859898162161; + float b = 0.6521644992684819; + float c = -0.12891188502256254f; + float d = -0.1113786924154f; + double e = -0.7509334102954947f; + float f = 0.6914401883584085; + double g = -0.5646987093798513f; + float h = 0.17356801106261507f; + double i = 0.10196298374088736; + double j = -0.47881479741608285f; + double k = 0.784068497624986; + float l = -1.3393068096079197; + double m = -0.8786138588286841f; + double n = 0.279690750413552; + double o = -0.49297696077155373f; + float p = 0.9491843853155991f; + float q = 0.16145040207861425f; + double r = 1.1205063233499855; + double s = 0.15193132509355292; + float t = 0.7557437760184059f; + float u = 0.8963245301242979f; + double v = -0.3848164064025619f; + double w = 0.228678870985318; + float x = 0.7549577316816095; + float y = -0.1658113968513975; + double z = 1.5766560067985493; + double A = 0.40026806824460387f; + return (A + (z + (y - (x * (w + (v - (u + (t + (s / (r * (q + (p - (o / (n - (m - (l * (k - (j * (i - (h - (g + (f + (e / (d / (c - (b - a)))))))))))))))))))))))))); +} + +double func_47() +{ + float a = -0.34000848274741813f; + float b = 3.1652934941028157; + double c = -2.217502983509164; + double d = -1.785677485151229f; + double e = 0.8447368923780029f; + double f = -0.05592924407875288f; + float g = 0.3077140772164674f; + double h = 1.0229267795430463; + float i = 0.6786724050987827f; + float j = 1.7879078261826726; + double k = -1.3246525618471092f; + float l = -0.5378413724435774; + float m = -2.247815244954041f; + double n = -0.28279715483338885f; + float o = -0.1819001196236559; + float p = -0.1121937499300839f; + double q = -1.0737478869871764f; + float r = 2.2654393339051584f; + float s = 0.9151188483179528; + double t = 1.1257042329886027; + double u = -1.154525300469596f; + double v = 0.47247752999337667; + double w = 0.3285590181089282; + float x = -0.8131647611061643; + double y = 1.8985530996777833f; + float z = -1.488515391726484f; + double A = 0.0743030996283408; + return (A + (z + (y * (x - (w * (v + (u - (t / (s - (r - (q * (p - (o + (n * (m - (l - (k - (j - (i / (h + (g + (f * (e / (d + (c + (b - a)))))))))))))))))))))))))); +} + +float func_48() +{ + float a = 1.3047745265041124f; + double b = -0.5223196806796805f; + float c = 1.3948504091458869; + double d = 0.3768242573938532; + float e = 0.12247885768682382; + double f = -0.5083754680206407; + double g = 0.5060453373079495; + double h = 2.578183848398937; + double i = 1.0037643569810204f; + double j = -0.04047110325193771; + double k = 0.7164061122512947; + double l = -0.03872074657528728f; + double m = -0.17489734951058628f; + double n = 0.8337092265806739; + float o = 0.11403993533795521f; + float p = -0.07171772446475158f; + float q = -0.3549280103971186; + float r = -0.4818764116157469f; + float s = -0.562955365099424; + double t = -1.347183781437034; + float u = -1.1812554047684432f; + float v = -0.018434589561402787f; + double w = -1.5399513107116636; + double x = 1.6390068888015885f; + double y = -0.9873758938114805f; + float z = 0.9459986832289805f; + double A = 0.8646506743038688f; + return (A * (z + (y + (x * (w - (v - (u + (t * (s + (r * (q - (p * (o / (n - (m * (l * (k + (j / (i - (h - (g + (f - (e * (d * (c + (b - a)))))))))))))))))))))))))); +} + +double func_49() +{ + float a = 0.034802706841389176; + double b = -0.5635367170602166; + float c = -1.5097338604522001f; + float d = -0.05565391746490102f; + double e = 0.6878627916624821; + float f = 0.24310056349495407; + float g = -0.5353217383034096; + float h = -0.7403315090751952f; + float i = 2.422110374371873f; + double j = -1.2962886051174216; + float k = -0.6928747457099071; + float l = -0.5007560338334486; + double m = 0.6748088056556418f; + double n = 1.4915119810412545; + float o = 1.1936781450557867f; + double p = 0.6775901627502703f; + double q = -0.40165562026819945; + double r = -0.4560978446039775f; + float s = 0.302792711307832f; + double t = 0.040301774791174194; + double u = -0.13283941203137375; + float v = -0.8528819366861448f; + double w = 1.419778282351318; + double x = -1.3419166593823908f; + double y = -0.929282689726214; + double z = 0.2178279728578624; + float A = 0.7645412660526529f; + return (A * (z + (y * (x - (w * (v - (u / (t / (s - (r + (q - (p + (o * (n / (m - (l - (k * (j * (i * (h + (g - (f - (e + (d * (c + (b + a)))))))))))))))))))))))))); +} + +float func_50() +{ + double a = -0.23186949368476853f; + double b = -0.047736757430352675f; + double c = -1.0375442584002594; + float d = 0.2797010653591271f; + float e = 0.5092410316747679f; + float f = 1.2913863144831814; + double g = 0.3330454207695355; + double h = 2.4302870630384166f; + double i = -0.047993236639493383; + double j = 0.6971666916707331f; + double k = 0.6804170043447; + double l = 1.8134201614814218; + float m = -0.8480904264600958; + float n = 0.33134405113578186; + float o = -1.1932713611128065; + float p = 0.6800558474824294; + float q = 0.5866495407687132f; + double r = -0.659505744252333f; + double s = 0.050399015686648355; + double t = -0.7090340858049965f; + double u = 0.5894064904591367f; + float v = 1.64061931469449f; + float w = -1.8193909709250078; + float x = -0.2069566402726988; + double y = 0.11062475561149085f; + float z = 0.6699119782699737; + float A = 0.6684530896895972f; + return (A - (z - (y + (x - (w / (v / (u / (t * (s * (r * (q / (p / (o + (n / (m / (l / (k * (j - (i + (h - (g / (f * (e + (d - (c - (b / a)))))))))))))))))))))))))); +} + +double func_51() +{ + float a = 0.4431788601456166; + float b = 0.321905398847473; + double c = 0.28443418701589596f; + float d = -0.8898950877604372f; + double e = 0.891553507283879; + double f = 0.015205525889612864; + float g = 0.8445619996942736f; + double h = -0.2536461276749807; + float i = 1.432975910141964; + float j = -0.5659300152691777f; + double k = 1.1428392017972904f; + float l = 0.9558104609911854f; + double m = -0.0800987529603106; + double n = 0.7714104689041784; + double o = 0.9104228943583458; + double p = -3.2142514634688135; + double q = 0.38685662564875334f; + double r = 1.4230740721131028; + float s = -0.7789783836367896f; + float t = -0.5657899522027243f; + float u = 0.35559294547662f; + float v = 1.0754048939804581; + double w = -1.567706195476475; + double x = 1.071758724618183; + double y = 0.7254434218006738f; + float z = -0.46566436106388687; + float A = -0.19702947605150303; + return (A - (z / (y / (x * (w * (v + (u * (t / (s + (r / (q - (p - (o * (n / (m + (l * (k - (j - (i + (h * (g / (f * (e / (d - (c - (b + a)))))))))))))))))))))))))); +} + +double func_52() +{ + float a = -0.6138694751365711f; + float b = -0.40131488880973226; + double c = 1.7640373023800981f; + float d = 0.8008532749646287; + float e = 0.5594955935121732f; + float f = 0.40545867554202364f; + float g = -0.40266704868584086f; + float h = -1.705824934477996f; + double i = 0.9368067341852812; + double j = -0.4230429007270142f; + double k = 0.1060189077962332f; + double l = -0.44235810873181997; + double m = -0.18122113212220908; + double n = 0.682978514698555f; + double o = -0.4923437569621886f; + double p = -0.1537578214263307; + float q = 0.09066889018350668f; + float r = -1.2549067190624943f; + float s = -0.18219612485939088; + double t = 0.2130251381199748f; + double u = 2.060864143851027; + float v = -1.7970909233795038; + float w = -0.450115188810704f; + double x = -0.10169391978134448; + double y = 0.2372526880931218f; + float z = 0.8583936321990138f; + float A = -1.1438039879532003; + return (A - (z + (y * (x + (w * (v - (u / (t - (s / (r - (q / (p - (o + (n - (m * (l + (k * (j + (i + (h / (g + (f * (e + (d - (c + (b - a)))))))))))))))))))))))))); +} + +double func_53() +{ + double a = -0.6403160916444336; + float b = 0.4836174920792343; + float c = -0.9699594365981001; + float d = -1.331313694844867; + double e = -1.4329876965962762; + double f = -0.7255866634679649; + double g = -0.2809941312831122f; + double h = 0.5573622064055939; + double i = -0.24231501222959176; + float j = -0.8836803984453947; + double k = 0.02298282564015198; + float l = 0.768435276037987; + double m = 2.0350472413013128f; + double n = -1.3339335818980034; + float o = 0.6334032785062329; + double p = -0.4864813911875125; + float q = -0.23260866406876457; + float r = 0.6655323257837455; + float s = -0.3241687072732684; + float t = -2.499075492277114f; + float u = 1.236958222109345f; + float v = -0.7808267061460826; + double w = -0.9117254824331474f; + double x = -0.13127766594426052f; + double y = -0.8094178547406381f; + float z = -1.0506164998968044f; + double A = -1.8368487693180564f; + return (A * (z - (y - (x * (w + (v - (u / (t / (s - (r / (q + (p - (o * (n / (m / (l / (k / (j + (i - (h + (g - (f - (e / (d / (c / (b + a)))))))))))))))))))))))))); +} + +float func_54() +{ + double a = 2.0225949518758375f; + float b = 0.4463406668610158; + float c = -0.8622323712703279f; + double d = -1.1142063107834184; + float e = 1.210756258318244; + float f = -1.166548277680922f; + double g = -2.1785971360532095f; + double h = -0.8295540919125045f; + float i = -1.1316386751768235; + double j = -0.2979526036732537f; + double k = -2.11231538726343f; + float l = -0.003754089079512126; + float m = 0.4112364523869556f; + float n = -0.6295811674687332f; + float o = -0.42166872779014053f; + double p = 0.020514215007273406; + double q = -0.6837230515544098f; + double r = 0.1738720122637513; + double s = -0.6974400548770698f; + float t = -0.8449111311651251; + float u = -2.049634169487875; + double v = 1.1745669754786967f; + double w = 0.19546669753159532; + double x = 0.07168746690971584f; + float y = -0.8509729014931698f; + double z = 0.04532529357509564; + float A = 0.6859578859478322f; + return (A / (z - (y - (x / (w * (v / (u / (t / (s / (r / (q / (p + (o + (n + (m / (l - (k + (j + (i + (h + (g + (f - (e + (d / (c + (b / a)))))))))))))))))))))))))); +} + +double func_55() +{ + float a = -0.9566482786044306f; + double b = -0.31748856564835165; + double c = 0.4634555272097565; + double d = 0.02852275420300978; + float e = 1.1673211308237348f; + double f = 0.6249598903166675f; + float g = -1.1685841041543017f; + float h = 0.06948133129265002; + float i = 1.7718339994060184f; + double j = -1.0223553062173425; + double k = 0.004335024026684094; + double l = 1.3365418825225146; + float m = -0.40844681184232273; + float n = -1.4354660913797623; + float o = 0.3335963111425209f; + double p = 1.0142234454636818f; + float q = 1.1935898621859888f; + double r = 1.1153924355353908f; + double s = -1.386899366738155f; + double t = -0.30032510887087527; + double u = 0.3538232271798322f; + float v = -0.13175170101695544f; + double w = 0.15656614517143996f; + double x = -0.2747934178647496; + double y = -0.2679813513763602f; + float z = -0.8606158969949158; + double A = -0.4860011288407023; + return (A / (z / (y / (x * (w / (v * (u / (t + (s + (r * (q - (p / (o / (n - (m - (l / (k / (j + (i * (h / (g - (f * (e * (d / (c - (b * a)))))))))))))))))))))))))); +} + +double func_56() +{ + double a = 1.0309482867067035; + double b = -0.6901463205132253f; + float c = 0.841722244024547f; + double d = -0.8019687762920276; + double e = -0.45484986839396574; + double f = 0.47642698001791817f; + double g = -0.33158568206206945; + float h = -2.731629167671664; + float i = -0.34919059024885657; + float j = 0.8087291429827705f; + float k = 0.48550048085785963; + float l = 1.4035018337162373f; + double m = -0.2966559746044604; + double n = -0.5478724634302028; + float o = 0.46269386779759447f; + double p = 0.13988204358361467; + double q = -0.22185421284131096; + float r = -0.6891984010125072; + float s = -0.33266675101205306; + float t = 1.0529043060123755; + float u = -0.30495980279141577f; + float v = 1.1750961934984125f; + float w = -0.3735599589950429; + float x = 2.348735126809131f; + double y = -1.972865020614677f; + double z = 1.0517717213218212f; + double A = 1.1496030997133442; + return (A - (z - (y / (x + (w * (v + (u + (t + (s / (r * (q / (p / (o - (n / (m + (l / (k - (j + (i / (h / (g + (f + (e * (d * (c * (b - a)))))))))))))))))))))))))); +} + +float func_57() +{ + float a = -0.8495845713106901f; + double b = 0.7605168373427253f; + double c = -0.2883764428459393; + double d = -1.3794829268162538; + double e = -0.4087550849174841; + float f = 1.1641951114459919; + float g = 1.4356606248968873; + float h = 0.90901272516792; + float i = -1.4965950825228653f; + double j = -0.6187525008131258; + float k = -0.836402037999864f; + double l = 1.5664182593619311; + double m = -0.26699253843446163f; + float n = 1.6184944742123644f; + float o = -1.0381049741483013f; + double p = -0.7687924706018162f; + float q = 0.2011446425827415; + float r = 0.5073943870945806; + float s = 0.42116344245408227; + double t = -1.2813166780534322f; + float u = -0.7500860457116013; + float v = 0.5815242673133875; + double w = 0.9459634035250337f; + float x = 1.4986862711163764; + float y = 0.07069190840746073; + double z = -0.15936774046184987; + double A = -0.8537169593285039f; + return (A * (z + (y * (x / (w - (v * (u - (t * (s - (r - (q / (p - (o * (n / (m - (l + (k / (j - (i / (h + (g - (f * (e - (d - (c - (b / a)))))))))))))))))))))))))); +} + +double func_58() +{ + double a = -1.8391728664777651; + double b = -1.3203363034140956f; + float c = 1.3310605542114242; + double d = 0.00766019244029004f; + float e = -2.3002216136530853f; + float f = -0.462757511001367; + float g = 1.3477784965557815; + double h = 0.056388741748172926; + float i = 0.05140616953102545f; + float j = -0.8749009147889691; + double k = -0.798748312807769; + float l = 0.20497853097124466; + double m = -1.2772715251203928f; + double n = -0.2217689556972141f; + float o = -0.2415193666408868f; + double p = 0.893764468646903; + float q = 1.1592118523181063f; + float r = 0.267431117237036; + float s = -0.3136004884854355; + float t = 0.3880409330573913f; + double u = -0.5276436691465413; + float v = -1.2522992504873949; + double w = -0.6770913347937243f; + double x = 1.0884391797000597f; + double y = 0.6782106412161415; + double z = 1.9965711251815397; + float A = -0.1934336223485774f; + return (A + (z * (y * (x - (w + (v + (u * (t - (s * (r + (q + (p + (o * (n - (m * (l - (k + (j + (i * (h - (g / (f + (e / (d + (c * (b + a)))))))))))))))))))))))))); +} + +double func_59() +{ + double a = -0.6955223807465505; + float b = 0.9122080874653467; + double c = 0.4520192939992624; + float d = 0.3479433208018927f; + double e = 1.8565190322047833; + float f = -0.21278680747217463; + float g = 0.45702485455356845; + float h = 1.3403497123103716; + float i = -1.4270357348208678f; + float j = -0.4807676236508918; + double k = -0.09032382521739037f; + float l = -1.2914506533665109; + float m = 0.1446540207707009f; + float n = 0.15208325690349184; + float o = -0.7856198659531767f; + double p = -0.6540119622628566; + double q = -0.7035318232757175f; + double r = 0.11201868961112364f; + double s = -0.9041703616934845f; + double t = 0.4852128772548038f; + float u = -0.7062064850716654; + float v = -0.3926342035693669; + float w = 1.3032388192114612; + double x = 0.9609761363673677; + float y = 0.8566939854500183f; + double z = 0.8213314312055193f; + double A = -0.5056803179652123f; + return (A - (z / (y - (x + (w / (v * (u * (t + (s / (r + (q * (p + (o - (n - (m + (l * (k * (j + (i + (h * (g * (f - (e + (d - (c + (b * a)))))))))))))))))))))))))); +} + +double func_60() +{ + float a = -1.1821917756063647f; + float b = 0.7233763933777693; + double c = -0.3770731694449931; + float d = 0.10741169404948687; + float e = 0.9135366472000448; + double f = -1.2376972002042488f; + float g = 1.6509847300766538f; + double h = 0.9285783782206432f; + double i = -2.1654110109489686f; + double j = -0.6864274565947477; + double k = 0.7285146473458469; + float l = 1.210746685490371; + double m = 0.4117140536270728; + float n = 0.40437833095965536f; + double o = 0.36405940800284037; + double p = 1.3251737738379035; + float q = -1.8156777039140284; + double r = 1.702514941798183; + float s = -0.47958672169615113; + double t = 0.21364165150001388f; + double u = 1.6404800908995718f; + float v = -1.5505059754513424; + double w = -1.1579224151018226f; + float x = -0.1448220624257918f; + float y = -2.702159088813206f; + float z = 2.360808929690786; + double A = -0.10264588513352058; + return (A - (z * (y - (x * (w - (v - (u / (t - (s * (r * (q * (p / (o * (n - (m / (l + (k - (j * (i - (h - (g - (f / (e * (d - (c + (b + a)))))))))))))))))))))))))); +} + +double func_61() +{ + double a = -0.2576706347662226f; + float b = -0.19270968779255604; + double c = -0.29173796236103744f; + float d = 1.1887190285632128; + double e = 1.16619084706637f; + double f = -0.04164866706743353; + double g = 0.02976726886091206f; + float h = 0.16080794119979172f; + double i = 0.6427385068088983; + double j = -0.23018540139561783f; + double k = -1.5566443737651348f; + float l = -0.36776250349169215; + double m = -0.3446962199352314f; + float n = -0.06335316282273815f; + float o = -0.2692459596711962f; + double p = 0.908742074234926f; + float q = -0.2855048582310516f; + double r = 0.48241502604923253; + float s = 1.6285920895072994; + double t = -0.7816154406859706; + float u = -0.6390118306916522f; + float v = -0.43541087873861045f; + float w = -1.6002050023710699; + float x = -0.34141899814034893f; + float y = -0.2626134181385888f; + double z = 0.39374048128173206; + float A = -0.04849020462937584; + return (A - (z / (y - (x + (w * (v + (u * (t / (s / (r * (q / (p / (o + (n - (m + (l / (k - (j + (i * (h * (g / (f * (e * (d - (c * (b - a)))))))))))))))))))))))))); +} + +double func_62() +{ + double a = -0.5049801732102217; + float b = -1.2328470645093283f; + double c = -0.5207811688119831f; + float d = 0.1241546856959872; + float e = 0.48260893982817193; + double f = 0.665322537845266; + double g = 0.6901420642045475f; + double h = -0.510028891525848f; + double i = 0.1580249215298114f; + float j = -0.13223021420300174f; + double k = 0.3574050377625633f; + float l = 0.19969548619314442; + double m = 1.3839601524012257f; + double n = -0.20100593367587946; + double o = -0.38332312470398755; + float p = -0.8015431883065487; + double q = -0.9041259917154862f; + double r = -0.2550123673710661f; + float s = -0.4996355114539434; + float t = 1.0650685617368727f; + double u = -1.7886905466855156f; + float v = 1.0067976765270579f; + float w = 0.8254559927821268; + float x = 1.4899628180949194f; + double y = 0.03266196570068046; + float z = 1.2026998002157714f; + double A = -0.4565138489022941f; + return (A / (z + (y / (x + (w / (v / (u / (t / (s + (r * (q - (p + (o - (n + (m + (l + (k * (j * (i * (h - (g - (f * (e - (d + (c - (b / a)))))))))))))))))))))))))); +} + +float func_63() +{ + double a = 0.55464360720861; + double b = -1.5275813170295116f; + float c = 0.4710472921277025; + double d = -0.4208155304951982; + double e = 0.13686546708412767; + float f = -1.8816088124515271; + double g = -1.2215488958025003; + double h = -0.06512783825807998f; + float i = 0.5420530622293079f; + double j = 1.6604011722503642; + double k = -0.06708996737142016; + float l = -0.9013483611313754f; + float m = 0.3842062952391462f; + float n = 1.2127304881737464f; + float o = 0.5727783367212118; + float p = 0.19187674996948906f; + double q = -0.40148287044815284; + double r = 0.5796643856498106f; + double s = 0.5405462821617787; + float t = -1.9078170985951712; + float u = -2.133317068163213; + float v = 0.7207748008528693f; + double w = -0.6176530468144522f; + float x = -0.5081074163185236; + float y = 1.1048682262034857; + float z = -0.23458089527145773f; + double A = 0.8006157299333381f; + return (A - (z * (y / (x + (w - (v / (u / (t * (s + (r - (q - (p * (o - (n - (m / (l + (k * (j * (i * (h + (g * (f - (e + (d / (c * (b - a)))))))))))))))))))))))))); +} + +double func_64() +{ + float a = -0.29450147575199065; + float b = 0.06968718317221669; + float c = -0.9128494559218416f; + float d = -0.18142458494524455f; + double e = -2.1445033103159155f; + float f = 0.2350261016324516f; + double g = -0.4123012621831135f; + double h = -1.4358336660708848; + float i = -0.3959210993339472; + double j = 0.19841308321217704f; + double k = 0.10672244769508155f; + double l = -0.9899068074718975f; + float m = -0.7935936076607323f; + float n = 0.27546169093061207; + double o = -0.4373674276818093; + double p = 0.35987715978471985; + double q = -1.1511461333773492f; + float r = -1.350028714005802f; + float s = 0.5261840134153021f; + float t = 0.0779852595537138; + float u = -2.3501847509932148; + double v = 0.4662954320563808f; + double w = 2.184767424157549; + double x = -0.09842095587490196f; + double y = 0.3096932329021205; + double z = 0.5880099569583427f; + double A = 0.7338851131106303; + return (A * (z * (y + (x + (w * (v + (u - (t + (s - (r / (q * (p * (o + (n - (m * (l + (k / (j * (i * (h + (g + (f * (e / (d / (c + (b / a)))))))))))))))))))))))))); +} + +float func_65() +{ + double a = 0.9042708500070691f; + float b = 1.168687274405136; + float c = 0.09387955909300762f; + double d = -0.7181869576892772; + float e = -0.5012906181594003f; + float f = -0.3646047107381794f; + double g = 0.04976605936969703f; + float h = 0.05684129280667482f; + double i = -0.12601492782418638f; + double j = -0.6626842931926314f; + float k = 0.6659933701473835f; + float l = 1.290455861600753f; + double m = 0.15114565488498738f; + float n = 1.539855461127376; + float o = 0.6920552090081895f; + double p = -2.2085743747600897f; + double q = 0.19618770076077022; + double r = 1.9311832136299152f; + double s = 0.6461140747054611f; + double t = -0.0959025266486019f; + double u = 0.13393213383934832f; + float v = 0.45126649991444245; + float w = 1.952786361471577; + float x = 1.2556942880163264f; + double y = 0.9300284244797428; + double z = 1.227746956452796f; + double A = -0.750109963934705f; + return (A + (z + (y * (x * (w * (v * (u / (t - (s - (r - (q + (p / (o * (n + (m * (l * (k / (j / (i / (h + (g - (f / (e + (d * (c - (b * a)))))))))))))))))))))))))); +} + +double func_66() +{ + float a = -0.3310154833099816f; + double b = -1.4392774232714292f; + double c = -1.3350033438614433f; + float d = 1.0808130470633868; + double e = -1.5882110506252676f; + double f = 1.6155336232489277f; + double g = -1.401652528289327; + double h = -0.014227647865074616; + double i = 0.06117893967236877; + double j = -0.6567798420063382; + double k = -0.3924274088260066; + float l = -0.9426642115575183f; + float m = -0.6753225345692905f; + double n = 1.0423779676128553; + double o = 2.0105738106934354; + float p = 1.762831849592261; + double q = 0.23756980130933986f; + float r = -2.311249493092167f; + double s = 0.7701144754332546; + float t = 0.3849937026814582f; + float u = 0.4271607033372802; + double v = -0.6000187305202072; + double w = -0.452091427272575; + double x = 0.2546028795340983f; + double y = -0.9940522890033087f; + float z = -1.5845521493149708f; + double A = 0.6588896037908483f; + return (A * (z - (y - (x / (w - (v + (u / (t + (s - (r - (q / (p + (o / (n / (m - (l / (k * (j + (i / (h - (g - (f - (e * (d - (c + (b * a)))))))))))))))))))))))))); +} + +float func_67() +{ + double a = 1.6238255133149093f; + double b = 0.9753980185970663f; + double c = 0.6864385731497269f; + double d = -0.4075777444045239f; + double e = -0.1555456668177774; + float f = 0.6422695019455197; + float g = 1.7365190634231125; + float h = 0.35201817446251576f; + double i = 1.8214261731195323f; + float j = -1.361473054279886f; + double k = -0.37613734451345576; + float l = 0.9686327727201847; + float m = 1.3364583825786502f; + double n = 1.788432225830942f; + double o = -1.2721410807121631f; + double p = -0.2514836766203183f; + float q = -2.0077911921614713f; + double r = -1.1138943413596107; + float s = -0.7467701871950334f; + float t = -0.06959300119579095f; + float u = -0.16380898103366315f; + float v = 0.2869533123467271; + float w = 0.2808963956047078f; + double x = 0.6496776272004583f; + double y = 1.2793716916384459f; + float z = -1.1539219346638105f; + float A = 0.91575949291488; + return (A + (z - (y / (x - (w + (v - (u / (t / (s * (r / (q / (p + (o / (n - (m - (l / (k + (j - (i * (h + (g - (f + (e / (d / (c - (b - a)))))))))))))))))))))))))); +} + +float func_68() +{ + double a = 0.224955208264004f; + float b = 0.0772651322289307f; + float c = 1.7442983993023278; + double d = 2.6760262683817f; + float e = 0.8729702968369143; + float f = 1.3549106695478386f; + double g = -0.19417788845671172; + float h = -0.7814306429653881f; + float i = -1.5684758335699738; + double j = -0.3147549663380514f; + double k = -0.35871744693743335f; + float l = 0.18257833223750242f; + double m = -1.9613558218922265; + double n = -0.538598253583925; + double o = -0.06332648579953105f; + double p = -1.1363408674817341; + float q = 0.5446159593125272; + float r = -1.0845606414267004f; + double s = 1.0973668590848216; + float t = 0.6690065712688977f; + double u = 0.8017012652416268f; + float v = -0.16464775549073213f; + float w = -1.2874801527922959; + float x = -0.22577560052930265; + float y = -0.6228928966350961; + double z = 0.48908433492695275; + float A = 0.030750286909828978f; + return (A - (z / (y * (x - (w * (v * (u * (t * (s + (r + (q / (p + (o * (n / (m + (l - (k - (j - (i + (h - (g + (f * (e + (d / (c / (b - a)))))))))))))))))))))))))); +} + +double func_69() +{ + float a = 1.300719946807737f; + double b = -1.0417275953943954f; + float c = -0.72047671124789; + double d = -0.579888024298831; + double e = 0.41298654260711243f; + double f = -1.3223854855140686; + float g = 1.2119707551864847f; + double h = -1.0487021498596576f; + float i = 0.4610565380785379; + float j = -0.5785406825363228; + float k = 2.457678692750587f; + double l = -0.7622599064418238; + float m = -1.8084598225338577; + double n = 0.9382110131106719; + double o = -0.83994753916443f; + double p = 1.7079380898683838; + double q = -0.3983849613497234f; + double r = -1.5643836621585792; + double s = -0.5624747502747524f; + float t = -1.7881931627463792; + double u = -0.3689165574331594; + double v = -1.3960417941739212f; + float w = 0.6168843925222763; + double x = 0.23652704457972357; + float y = 0.1493001645715037; + float z = -0.00451594665700946; + float A = -1.7553307960684823; + return (A / (z + (y - (x * (w / (v - (u * (t - (s * (r - (q / (p / (o / (n / (m - (l * (k + (j * (i / (h * (g * (f + (e / (d * (c / (b - a)))))))))))))))))))))))))); +} + +float func_70() +{ + double a = -1.4520973223667282f; + float b = -0.49585572212683404; + float c = 1.743265557597132f; + float d = -0.6741740680833194f; + double e = -0.8071674531061973; + float f = 0.9651494276101775f; + float g = 0.33448267468682974f; + double h = 0.2500279127761966; + double i = 1.2668560212584448f; + double j = 0.9469189977745324; + float k = 0.08037284780888579; + double l = 0.9682803561806761; + float m = -0.5030673459077853; + double n = -0.13171949943870884f; + float o = 0.007850621262464438f; + float p = -1.5369628791946368f; + double q = -0.85515438174992f; + float r = -0.23433105927808773; + double s = 2.198908143331942; + float t = -0.03718322891917802; + double u = -0.19485806376390022f; + float v = 0.20539201767092685f; + float w = -1.9064655633230363; + float x = 0.5210979631970774; + double y = 1.074931320520895; + double z = -0.5077893232380255; + double A = -1.1236104823254511; + return (A / (z - (y + (x / (w / (v + (u + (t + (s * (r - (q + (p - (o - (n + (m + (l + (k / (j * (i / (h + (g + (f + (e * (d * (c - (b / a)))))))))))))))))))))))))); +} + +double func_71() +{ + double a = -1.5383694727027342f; + double b = 1.7379419359348456f; + float c = 0.23230134611964443; + double d = -0.4911158243575911f; + float e = -0.5068910038762646f; + float f = 0.8173565986186648; + float g = -0.15679151540223588f; + float h = 0.24376128454625617; + double i = 0.6392051944173752f; + float j = -1.3426397485520865; + double k = 0.6451141665074582f; + double l = 0.1607543914412348f; + float m = 1.2031954263450249; + double n = 0.7412850164563435f; + float o = 1.858674780174226f; + double p = -0.0727461502202768; + double q = -0.31657811645506606; + double r = 0.4818269230608346f; + float s = 0.7506045629362894f; + float t = -2.203483341637799; + double u = 1.8114519596642003f; + float v = -0.7214671915866347f; + double w = 0.25171011105240265; + float x = 0.5744096683100218; + float y = -0.7869865582658951f; + float z = -0.616819417391862f; + double A = -0.15342607333291994; + return (A - (z / (y * (x - (w * (v + (u * (t + (s - (r + (q * (p - (o * (n - (m * (l * (k + (j / (i - (h * (g - (f + (e + (d - (c - (b * a)))))))))))))))))))))))))); +} + +double func_72() +{ + float a = 0.8545761622239733f; + double b = -0.8013410050167649f; + double c = -0.27364294413546414; + float d = 1.556232375116301f; + float e = 1.2844490334035548f; + float f = 1.6151190457153126; + float g = -0.5996313488320864f; + float h = 0.37205278869285935; + float i = 0.010794321998861956; + float j = 1.387231692359005; + double k = -0.9551837627939389f; + float l = -0.6871356402578757; + float m = 0.1368419261125169f; + double n = -0.4731964860231818; + float o = 1.130501839802997; + float p = 0.4038392371734963; + double q = 0.9604573784840305; + float r = 2.796881856046597; + float s = 1.3853998432492212; + float t = -1.4834259313480433; + double u = -0.09875447651954543; + double v = 1.0731690053606286f; + float w = 2.1806006570042267; + float x = 0.22964721373911612; + float y = 0.21869294997325386f; + double z = 0.44205162048392954; + double A = 0.4200362892715032f; + return (A - (z - (y / (x / (w + (v * (u * (t * (s + (r - (q * (p * (o + (n + (m * (l * (k * (j + (i + (h + (g * (f - (e - (d * (c - (b / a)))))))))))))))))))))))))); +} + +float func_73() +{ + float a = -1.823437971603722; + float b = -0.47578590223978023; + double c = -0.3729498752772312f; + float d = -0.4022812661104643; + double e = -1.128911757209387f; + float f = -0.9587372114649225f; + double g = 0.12911763901026724; + double h = -0.160585374071431; + double i = -0.0925382258144923; + float j = 1.4153528629088563f; + double k = -0.780249448338679f; + double l = -0.3447774093413423f; + float m = -0.7025644993704719f; + double n = -1.3749593154349091; + double o = 1.1590202138833614; + float p = 1.274069413927948; + double q = -0.8165030746538242; + float r = 1.221274075581511f; + float s = -0.8627718900657116f; + float t = -0.06229265526535411f; + double u = -1.0807958281428818; + float v = 0.43707537256666146f; + float w = 0.7396739268571904f; + double x = 0.3787777019884424; + float y = 0.583749642593578; + double z = 0.05569591857079685; + double A = -0.08916924470956021f; + return (A + (z * (y / (x - (w - (v / (u / (t * (s * (r + (q / (p / (o - (n + (m + (l + (k - (j / (i + (h * (g + (f * (e - (d + (c * (b - a)))))))))))))))))))))))))); +} + +double func_74() +{ + float a = 0.024911022050263017f; + double b = -1.612768322977245; + float c = -0.6184231437618142f; + double d = 1.3624764951707697; + double e = 0.7726765392272834; + double f = 0.4310430361759366; + float g = 0.7940937342324678; + float h = 0.4481276910165398; + double i = -1.410333417459822; + double j = -0.5214652596135466f; + double k = 1.260515263975497; + float l = 0.1795163795560406f; + float m = -1.8812520467316127f; + float n = -0.3647467679244809f; + double o = -1.6364666312605975f; + float p = 0.13447456037787964f; + double q = -0.006806911626729885; + float r = 0.31015437111993166; + double s = -1.2583852453024638f; + double t = -0.6844284315102813f; + double u = 0.48269402661655253; + float v = 0.4087334896532666f; + float w = -0.6047344276262078; + float x = -0.24858943749956441; + float y = 0.5157820076786949; + double z = 0.3052475061257754; + double A = -2.1798970034788168f; + return (A + (z / (y - (x * (w / (v / (u + (t * (s - (r * (q / (p / (o / (n + (m + (l + (k - (j / (i * (h * (g * (f / (e - (d - (c / (b + a)))))))))))))))))))))))))); +} + +float func_75() +{ + double a = -0.13845916017632792; + float b = -1.197135640773349; + double c = 0.37432854919928893f; + double d = -2.2037459985704624f; + double e = -0.47258993698342366; + double f = 1.0039221005640548f; + float g = 0.18457844366947862; + double h = -1.757588114835565; + double i = -0.09489993429757161f; + double j = 0.07058376575164484; + float k = -1.5461852449813502; + double l = -0.6304172184954835f; + double m = -0.6969530634685539; + double n = -0.5757404509331887; + double o = 0.03124200267432945f; + double p = -0.7668565124354854; + float q = 1.8135184090218595f; + float r = 0.12157491741767724; + double s = -0.6882196105110255f; + float t = 0.509325243551741f; + float u = -0.018621324750841304f; + double v = -1.637566317372828f; + double w = -1.0034117773051048f; + float x = -0.34293136322229356f; + double y = 1.277878066715453; + double z = 0.7152749155943069f; + float A = 1.7868393775366158f; + return (A * (z / (y / (x + (w - (v + (u + (t + (s + (r * (q - (p * (o * (n - (m / (l - (k / (j - (i * (h + (g / (f - (e - (d * (c - (b * a)))))))))))))))))))))))))); +} + +double func_76() +{ + float a = 1.8906578084312653f; + double b = 1.2767866346127716f; + double c = 0.7977647117219634; + double d = -0.7964612530811017; + double e = 0.5909080104576796; + double f = 0.19966214710326977f; + float g = 0.7461766539272775f; + float h = 0.2388902214574735; + double i = -0.12157632364706976; + float j = 1.573571607428485f; + float k = -1.2658173440115288f; + double l = 0.7244388760048597f; + float m = 1.4234377856414997f; + float n = 0.6439219410425123; + float o = 0.8003501344274748; + double p = -0.38935587062584087f; + float q = 0.2205713444765181f; + double r = -0.1763441635709086; + double s = 1.7828119509636622; + double t = -0.006454043784227535f; + float u = 0.679529396316822f; + float v = 0.6844353305855068f; + float w = 0.15392171159839102f; + double x = -1.6228831703381423f; + double y = 2.8749678834470065; + double z = 0.571409083987718f; + double A = 0.7069529163742099f; + return (A * (z / (y + (x - (w + (v - (u / (t / (s / (r - (q - (p / (o * (n - (m / (l - (k * (j + (i * (h / (g + (f + (e + (d - (c * (b + a)))))))))))))))))))))))))); +} + +double func_77() +{ + float a = -0.11535370842785721f; + float b = 1.7661821322887656; + float c = -0.6215802484464318; + double d = -1.6408535876888548; + double e = -0.10012265520822856f; + float f = 0.7354528635205736f; + double g = -0.059302070393582235; + double h = 0.053998829262605415f; + float i = 0.25477593791872255f; + float j = -0.07076423861674733f; + double k = -0.5134993295149678f; + float l = -0.8407530929310347; + double m = -0.5295419882502357f; + double n = 0.37692915725753484f; + float o = 0.5459737362360085f; + float p = -0.9920688246392938f; + double q = -0.6503810585595144f; + float r = -1.4834351190169333f; + float s = 1.4232746034218065; + double t = -0.8418288081886209; + double u = 1.9184647780618833; + float v = 0.689511640631611f; + float w = 1.0941426093685866f; + float x = 0.4353436661981731f; + double y = -0.764644080872512f; + double z = 0.2771388729271829f; + float A = 0.7929552542431385f; + return (A / (z * (y * (x - (w - (v + (u * (t + (s + (r + (q / (p / (o / (n + (m * (l * (k / (j / (i * (h - (g / (f * (e * (d * (c * (b * a)))))))))))))))))))))))))); +} + +float func_78() +{ + float a = 1.8925077086171747; + double b = -0.401558753593309; + float c = -1.3783764910860803; + float d = 1.1906367097715496f; + double e = 2.523899240717992; + float f = 0.19604684086325758; + double g = 1.6084546190232953; + double h = 0.05727365534073123; + float i = 0.31165293608653744; + double j = 0.5591250334518332f; + double k = 1.6161195857269095; + float l = 0.7324080790712344; + double m = -0.015820392789855798; + float n = 2.6142279430118593; + double o = 0.4376893483514585f; + float p = -0.15042374644210477f; + double q = 1.4713795636667717f; + float r = 0.0001641285240044707; + double s = -0.004361728681584227; + float t = -1.662671871777069f; + double u = -0.8949636589257665; + double v = 0.9976642533645562; + float w = -0.5912144538039434; + float x = 1.5653927683413582f; + float y = 1.6342883842008626; + double z = -0.558229143244886; + float A = 1.2483571700956997f; + return (A + (z + (y / (x * (w - (v / (u + (t + (s * (r * (q + (p * (o - (n * (m / (l * (k * (j * (i / (h + (g * (f / (e - (d / (c + (b * a)))))))))))))))))))))))))); +} + +float func_79() +{ + double a = 0.5908624171903448f; + double b = 1.2749177873939677f; + float c = 1.5343248305667934f; + float d = -0.5612927808216172f; + float e = -1.2133376597831729; + double f = 0.06389019961858482f; + double g = -0.6247338294968952f; + double h = -0.6737562625130432f; + float i = -2.1523595259138912f; + float j = 1.2794139226618462f; + double k = -1.0069682109739326; + double l = 0.41080206246909573; + float m = -1.5299819196049558; + float n = 1.6086628309530067; + double o = -0.1894264104310225f; + double p = -0.019755957918516632f; + double q = 0.03583435846568327; + double r = -0.5492196301221286; + float s = 1.151921306417695f; + float t = -1.4264065855487988; + float u = 0.571347533534605f; + double v = -1.9670429558514706f; + float w = 0.6312339485444817f; + float x = -0.18981781787887492; + double y = -0.8521509038804225; + double z = -1.0229418364754153f; + float A = -0.8987439406871566; + return (A + (z * (y * (x + (w + (v - (u - (t * (s * (r - (q * (p - (o - (n / (m * (l - (k / (j / (i * (h + (g - (f - (e - (d * (c * (b * a)))))))))))))))))))))))))); +} + +float func_80() +{ + double a = 1.1817339954310075f; + float b = -1.0764870417525747; + double c = 2.240293972144401; + double d = -0.6927777758901117; + double e = -1.2019354746179836; + float f = 0.3619358167992552; + double g = 0.6683730580304039f; + double h = 0.0354815840796922f; + float i = -0.3422103082513481; + double j = 0.06077991224370366; + double k = 1.764098554073873; + double l = 1.4034290239196543f; + double m = 0.05900766847570491f; + double n = 0.0912583866850336f; + float o = -0.5312688974753307f; + float p = 0.1314825709447138f; + float q = 1.268808870908519; + double r = -0.08520294766586906; + double s = 0.4300117613861505f; + float t = 0.5976544157094087; + double u = 0.6457707987031771; + double v = 0.7772589196155142; + double w = 0.658043336732762; + double x = -0.2600029340028935f; + float y = 1.104230758594611f; + float z = -0.24495597028493185f; + double A = -0.5663475413056599; + return (A * (z * (y / (x - (w - (v - (u / (t + (s - (r / (q * (p + (o / (n / (m - (l - (k + (j * (i - (h / (g - (f / (e * (d - (c - (b * a)))))))))))))))))))))))))); +} + +double func_81() +{ + float a = -1.1125539373583635f; + double b = 0.39376628830329174; + double c = 1.7629046773982076f; + double d = -0.48905678199655683f; + double e = 0.05995456374972448f; + float f = 0.6745465732759932f; + double g = 0.44407514496774925f; + float h = -0.6125327504852386; + double i = 1.1125992543860108; + float j = -0.45195094779574774; + double k = -1.5099896982945822; + float l = -0.4626445734353483f; + double m = -0.8218817587030537; + float n = -1.3399944399877373; + float o = -0.10793304359323729f; + double p = -0.6097471558522185f; + float q = -0.485395899798474f; + float r = -0.4484565175028551; + double s = -2.0433350121409646f; + double t = 1.8105918030366983; + double u = -0.3241997849332784f; + double v = -0.01710837323826158; + double w = 0.6112849351127353; + float x = -0.569128357836499; + float y = 0.6575252529962031; + double z = -0.5249835450826685f; + double A = 0.39280614676442865; + return (A / (z * (y - (x * (w - (v - (u / (t / (s + (r - (q + (p - (o / (n - (m + (l / (k * (j / (i / (h / (g + (f + (e + (d * (c * (b - a)))))))))))))))))))))))))); +} + +double func_82() +{ + float a = -0.38231114336620836f; + float b = 0.2522812672994572; + double c = -1.290060234788946f; + float d = -0.3658362224994775; + double e = -0.1307795580889496f; + double f = 1.1509677486260104; + float g = -0.2506603148767751f; + float h = -1.7759662061107788f; + float i = 1.0017923261279102; + double j = -0.07978909790399458; + float k = 0.4852147103055234f; + float l = -0.15135989069023742; + float m = 1.0532549794117942f; + float n = 1.2115686411279514; + double o = 1.0813480872183958; + float p = 1.1237809231095028; + float q = -0.08616105958185914f; + double r = -0.5317195757841351; + double s = 0.56306675029827; + float t = -0.15866987940297053; + double u = -0.7337832010560758f; + double v = -0.1270835597978728f; + double w = -0.03226997926135817; + double x = -0.5647592124491905f; + double y = -1.120575759077063f; + double z = -0.45206392022429387f; + float A = -1.5406197557924743; + return (A + (z + (y + (x - (w - (v + (u - (t - (s * (r - (q + (p + (o - (n - (m + (l - (k + (j * (i - (h / (g - (f * (e * (d * (c - (b + a)))))))))))))))))))))))))); +} + +double func_83() +{ + float a = -1.294193172375473; + double b = -0.020667576389877942; + float c = -1.381037028889947; + float d = 0.851464334500485; + double e = 1.7601098389410659f; + float f = -0.991928278736229; + double g = -0.9664905396374275; + double h = 2.1657623701849014f; + double i = -0.5511759205184811; + double j = 0.08192518811909824f; + double k = -0.34051597743823486; + double l = -1.319503047157906; + double m = 0.5213100922721667; + double n = 0.9918127954555822; + float o = -0.29379064693912244; + double p = -0.3747043323657385f; + float q = 0.8057415505478022; + double r = 0.2642181376067267f; + double s = -1.3890017721538386; + float t = -1.3313757091064655f; + double u = 1.1520985652953273f; + float v = 0.5643648903744268; + float w = -1.0601632873977715; + float x = -1.346254203935398f; + float y = 0.7620965736997297; + double z = -0.8022547260309418; + float A = 1.9504155256256634; + return (A + (z / (y / (x + (w * (v - (u + (t - (s / (r - (q - (p - (o / (n / (m - (l - (k - (j / (i / (h * (g + (f - (e / (d + (c - (b / a)))))))))))))))))))))))))); +} + +float func_84() +{ + double a = 1.0428638145714528f; + double b = -0.46781938530893763; + float c = -0.10874464474539759f; + float d = 1.4328802927705568; + float e = -2.5976688382245205f; + double f = 0.198858429813854; + float g = 0.6483101050597109; + float h = -1.2262238817245577; + double i = 1.7525891346934885f; + float j = -1.0126278314235109f; + double k = -0.5886278020407236f; + float l = -1.1675977031902145f; + float m = 0.6878330038928655f; + double n = -0.3133289896871772; + float o = 0.03880234453714323f; + double p = 0.991847951146984; + float q = 2.206190138480219; + double r = -0.41901766020132325f; + float s = 0.3587252072041318; + double t = 0.0916219297605252f; + float u = -0.3935449686849185f; + float v = 0.4216418726167504; + float w = -0.7196058653872035f; + float x = 0.17675127505038848f; + double y = -0.04258882249603471; + float z = 1.0286172698857527f; + float A = 0.5725119362091301f; + return (A * (z - (y * (x / (w - (v + (u / (t + (s - (r / (q * (p - (o / (n + (m - (l * (k / (j * (i * (h - (g / (f / (e * (d / (c - (b + a)))))))))))))))))))))))))); +} + +double func_85() +{ + float a = -0.25747875010549165; + double b = -0.9609716949350381; + float c = 0.10939239359347079; + float d = 1.6304757682223427; + float e = -0.547862245842257f; + double f = 0.004679838901093907; + float g = 1.3788792712756672; + double h = -1.736495221909116; + float i = 3.0711970139393054; + float j = 0.33510849602501064f; + float k = -0.20635811956582772f; + double l = 0.36410540391721025; + double m = 0.8021350148317409f; + float n = 1.4211230362298957f; + double o = -1.0959379208407933f; + float p = -1.2275041872962744f; + float q = -0.372357394901711; + float r = -0.3526831824175791f; + double s = 0.8113122681994853; + double t = -0.34431607581492657f; + float u = -0.48374832671824775; + float v = 0.5877524119977283f; + double w = -0.579599799443183f; + double x = -0.25447280774266295; + float y = -0.3176735875949176f; + float z = 0.9836041421657429f; + double A = -0.027325376061677415; + return (A * (z - (y + (x - (w + (v + (u - (t + (s + (r - (q - (p / (o / (n / (m + (l - (k / (j - (i * (h / (g / (f + (e / (d + (c - (b / a)))))))))))))))))))))))))); +} + +float func_86() +{ + double a = -1.3842959771317385f; + double b = -0.7780726780404603; + double c = -0.5382553866695763; + float d = -0.7700009315140228f; + double e = -1.1511099304990502f; + float f = -0.39524048816092644f; + float g = 1.9211301145665718; + float h = 0.09017801172560624; + float i = -0.7277879637773862; + double j = -0.15450655579227754; + double k = 0.696922272705824; + float l = 1.3145637575123064; + double m = -0.732363826046359; + double n = 0.6651257559240231f; + float o = 0.729541455237561f; + float p = 1.6496513471488752f; + double q = -0.9280033362668079; + float r = -1.3995173256713827f; + float s = -0.08875539306672094; + double t = 0.5609989269950588f; + double u = 1.022626152616851; + double v = 1.0565592137726396; + float w = 0.057271167806658745; + double x = -0.08540473545834182; + double y = -1.7524726283363543f; + float z = 1.035425997824762; + float A = -1.012970483728113f; + return (A * (z - (y + (x * (w + (v * (u + (t / (s * (r / (q * (p * (o * (n + (m * (l * (k + (j * (i + (h * (g - (f - (e / (d * (c - (b / a)))))))))))))))))))))))))); +} + +double func_87() +{ + float a = -1.8892933678533346f; + float b = -0.403459901166887; + float c = -0.16950098064960692f; + float d = 0.34654115639134647f; + double e = -0.05224598612811014; + float f = -0.10030609409194127; + double g = -0.4589202362080691; + float h = -0.8571634677016147f; + double i = 0.6314564043340932; + float j = -1.1146052230220138f; + float k = 1.0032937641531876; + float l = -2.0459948770978973; + double m = 0.6458424706042962f; + double n = -3.020610716557065f; + double o = 1.1821854821033835f; + double p = -0.6697117243000305; + double q = 0.04405186655872912f; + float r = -0.2601621273582332; + double s = 0.8082418796067057; + float t = -1.182680314210559f; + float u = -0.4159731244803944; + double v = -0.14153451875356768f; + double w = -0.4272915075059703; + float x = 0.329888455209235f; + float y = 0.20862707324961235f; + float z = -1.2775862839498102f; + double A = 0.40172492374832247; + return (A / (z * (y / (x * (w - (v + (u / (t + (s / (r + (q + (p * (o - (n * (m * (l - (k + (j - (i * (h / (g * (f - (e + (d + (c - (b + a)))))))))))))))))))))))))); +} + +float func_88() +{ + float a = -1.1938001911083842; + float b = -0.041032577509931875f; + double c = 0.7533160710283204f; + double d = 0.031246540902343512; + float e = 0.6867144839387532f; + float f = -0.7378738419650483f; + double g = -1.283363926063913; + float h = -0.8864368347378142; + float i = -2.0354334403288643; + double j = -0.07707680300951263f; + float k = 1.2112307905408817; + float l = 0.6692958739993191; + double m = 0.1549367167787486f; + double n = 0.8540273766865555f; + double o = 0.1848259479090226f; + float p = -0.9525665262139837f; + float q = -0.04196730654837496; + float r = 1.7913269989355305f; + float s = -0.7748817892829086f; + double t = 0.07622096199847311f; + double u = 0.94713210467392; + double v = 1.1785881608050852f; + double w = 0.8249070243623594; + float x = 2.0453302492490035f; + float y = -1.8530434822668076; + double z = -1.016697797477138; + float A = -0.3745560127997125f; + return (A / (z + (y / (x * (w * (v - (u * (t - (s * (r - (q / (p + (o / (n + (m * (l * (k * (j - (i / (h - (g * (f / (e * (d - (c - (b + a)))))))))))))))))))))))))); +} + +float func_89() +{ + double a = 0.4194867525598698f; + double b = 0.9722993637851696; + double c = -2.30317467115832; + double d = -0.7529353268428222; + double e = -1.367644852921572f; + double f = -2.0375036923088774f; + double g = 1.2511871389293072f; + double h = -0.1434253320378408f; + double i = 0.456230289351604f; + double j = 1.07649765566085; + double k = -0.9508115615751556; + double l = -1.9100161464352645f; + float m = 1.1107089916462944f; + float n = -1.318274409592458f; + double o = 0.008099366463956828f; + double p = -0.014372402661543233f; + float q = 0.12186957903707754f; + double r = -0.9996180567718298; + float s = -1.4497034010888947; + float t = -1.3465293396504234; + float u = 0.8061538141083421f; + double v = -1.5805662778203884f; + float w = 1.2351086587673963; + float x = 2.938762843148313; + float y = 0.930760524019391f; + double z = 0.08456703562279114f; + double A = -0.5163328524481521; + return (A / (z - (y + (x + (w / (v - (u / (t - (s / (r + (q / (p + (o / (n / (m * (l - (k * (j + (i + (h / (g - (f / (e * (d * (c / (b + a)))))))))))))))))))))))))); +} + +double func_90() +{ + float a = -0.32120274302610324; + float b = -0.9493123684473052; + double c = -0.8011765116733341; + float d = -1.5511531578404285; + float e = -0.5595194079022113f; + double f = -0.5401497596384082f; + float g = -0.27630359737582566; + float h = -2.071133492123677; + double i = -1.7244671922763422f; + float j = -1.0206718310665215; + float k = -0.6774604356513603; + double l = -0.11278034092914073f; + double m = -1.768129540653668f; + double n = -1.177536914912651f; + double o = -0.22392764746485508; + float p = 0.1972450956158281; + float q = -0.1516697290435895f; + float r = -0.07461251893347629f; + double s = 1.4938797778520856f; + float t = 1.3500874799607785; + float u = -0.9391942041358777; + float v = 0.6941175541919252f; + double w = -0.5808697859248615f; + double x = -0.10410633213204676f; + float y = 0.8136605802293251; + float z = 1.2441167324195106; + double A = 0.11789823655417306; + return (A - (z + (y * (x + (w / (v / (u - (t - (s / (r - (q - (p / (o / (n - (m + (l + (k / (j * (i * (h - (g - (f / (e / (d + (c / (b - a)))))))))))))))))))))))))); +} + +float func_91() +{ + double a = 1.3894384547084986; + float b = 0.06448899333142082; + double c = -1.0596615773668825f; + double d = -2.035415567990408; + float e = 1.8033410654651556f; + double f = -0.9997971395850038f; + float g = 0.28133504531228753f; + double h = 0.69708899611579f; + double i = -1.2404044252230704f; + double j = 0.09132682653451923f; + double k = 3.009389128842671; + double l = 1.791368679682678f; + double m = 0.7070050006283937; + float n = -1.4396793209054821; + double o = -0.30212640062201296f; + double p = -0.36706626560895145; + float q = -0.6548488909719431; + float r = 0.5914817815360466f; + double s = -0.9034792086265315f; + double t = 0.262687632735583f; + float u = -0.9280388348434229; + float v = 0.5615858272384499; + double w = 3.125134615795487f; + float x = 0.15806499470351704; + double y = 1.6381435664486907f; + double z = 0.8165695367633907f; + float A = 1.112713743048884f; + return (A / (z + (y / (x / (w * (v + (u * (t / (s / (r + (q + (p / (o + (n * (m / (l * (k / (j + (i * (h + (g + (f - (e - (d / (c * (b - a)))))))))))))))))))))))))); +} + +float func_92() +{ + double a = 0.57292463937646; + double b = 1.4256939952874377f; + float c = 0.8911150458161244; + double d = 1.3053967349795357; + float e = -3.9061466498874995f; + float f = 0.250480599538113; + double g = -0.03882656475842709f; + double h = -0.36670770377277134; + float i = 1.235009934237375f; + float j = -0.11400485345121024; + float k = -0.6249619554746803f; + float l = 0.47851263952717693; + double m = 0.007480094311301812f; + float n = 0.5595651646160349f; + double o = 0.8174730159215209f; + double p = 0.721542939593032; + double q = -1.1911862141960752f; + double r = -0.302356334843037f; + double s = -1.2536735562509214; + float t = 0.11178242025867083f; + double u = -1.9495279627495412f; + float v = 0.14582042733256348; + double w = 0.6311037685737196; + double x = -1.1468446806120347; + double y = 0.12301677499060824f; + double z = 0.9935975104967115f; + float A = 1.5429784887407887; + return (A / (z - (y + (x - (w * (v + (u / (t / (s + (r / (q * (p - (o + (n - (m + (l + (k / (j - (i / (h / (g - (f / (e * (d / (c + (b + a)))))))))))))))))))))))))); +} + +double func_93() +{ + double a = 1.8864617607450294f; + float b = 0.45668732664393724f; + float c = -1.2070282578462919f; + double d = -1.6343275075602737; + float e = -0.7175933201884869; + double f = -0.7338294080452862f; + float g = 0.19949452176801633f; + double h = -2.9724585215211654; + double i = -0.4132121987035206f; + double j = -1.6171817147386487f; + float k = -1.2892290968930542f; + float l = 0.02678050855845624f; + float m = 0.549948439245975f; + float n = 1.227883085189855f; + float o = -0.5809961092164018f; + float p = 1.0588903028789376; + float q = 0.31944879631489487; + float r = 0.49785420157005655; + double s = 0.5445753418600356; + double t = 1.2129516475713522f; + double u = 0.7073519744668192f; + double v = 0.05472113676042637f; + double w = -0.26771615056928755; + float x = 1.0710558014207152; + double y = -1.2066473157542377f; + float z = -0.4643712076999698f; + double A = 1.579528370271839; + return (A / (z - (y / (x / (w * (v - (u * (t * (s / (r * (q / (p * (o / (n * (m - (l - (k - (j - (i / (h + (g * (f - (e * (d - (c + (b * a)))))))))))))))))))))))))); +} + +double func_94() +{ + float a = 0.4658289585003436f; + double b = -0.3753701532094086; + double c = -1.505441641604571; + float d = -0.44914023164632827f; + float e = 0.07252555317088774f; + double f = -0.49141936626050586f; + float g = -1.3561151303140062f; + float h = -0.1736653360642171f; + double i = -0.15755384893223426f; + float j = -1.2886586413092853f; + double k = 0.24470174961447633f; + float l = 1.3895765960801307f; + double m = 0.5730028522939253; + float n = -0.28127263364636496; + float o = -1.4533391674494351; + double p = 0.813217425882848; + float q = 1.7968819219157932; + double r = -0.053169911781310704; + double s = -1.0133314254896324; + float t = -0.22639125763619147; + double u = -0.4265300175930278; + double v = -0.7711498387547459; + float w = 0.15265088831196272; + double x = -0.23419101385619964; + float y = -0.5364935944902336f; + double z = -0.31709875459071307f; + double A = 0.41611013011222503; + return (A + (z * (y / (x - (w / (v / (u - (t - (s + (r / (q - (p + (o - (n - (m + (l + (k - (j + (i / (h - (g / (f - (e * (d * (c / (b / a)))))))))))))))))))))))))); +} + +float func_95() +{ + float a = 0.23798547962036165; + double b = -1.1478049135628323f; + float c = 0.3421357369763205f; + double d = 0.3026007543909064f; + float e = -0.42112520850950436; + double f = -0.15656092951877873f; + float g = 0.31923049187877195; + double h = -1.346407829400968f; + float i = 1.780676930136882f; + float j = -1.7231300569888999; + float k = 0.9668216544086227f; + float l = 0.2724877017369455; + double m = -1.9002435581648427; + double n = 1.0892092804195523; + double o = 0.32610687282731143f; + float p = 1.5006287441105672f; + float q = 0.30959906498196704f; + double r = -0.3831759908969788; + float s = -0.4359118857981098; + float t = -1.2077552201229762f; + double u = 0.5653912330611501; + double v = 2.098385795097f; + double w = 0.908115977108047; + float x = -1.2808742841852265f; + double y = 0.012429751421341647f; + float z = 0.09482593155844965; + float A = -1.1552349143774305; + return (A * (z - (y / (x + (w - (v + (u / (t / (s + (r / (q / (p * (o * (n + (m + (l * (k + (j + (i - (h + (g + (f + (e - (d + (c * (b + a)))))))))))))))))))))))))); +} + +float func_96() +{ + double a = 0.5599147327005737; + float b = -0.21416085116323452; + float c = 1.5568459060822593f; + float d = 1.6403301907495769; + float e = 1.0443883882314546f; + float f = -0.7199055451209588; + float g = -1.4521454220883063; + float h = -0.3673980791603706f; + double i = -0.8606616851317455; + double j = 0.7583252889281425f; + double k = -0.7789185960472105f; + double l = 0.7960813854308074f; + double m = 0.8686806807721117f; + double n = -0.6149124688278229; + float o = 1.0331469375343783; + float p = -0.36657735520794604f; + float q = -0.0016966536087795845f; + float r = -0.6681517565541588f; + float s = 0.20662962187470596; + float t = -1.364077900306971f; + double u = -1.824961731151803f; + float v = -1.046369252074331f; + double w = -0.3036868989726796; + float x = 0.18523991716768684f; + float y = -1.5572056545972646f; + float z = 0.8594486534980903; + double A = -0.17347783019195367f; + return (A + (z + (y / (x + (w * (v * (u + (t - (s / (r - (q * (p + (o / (n - (m + (l / (k / (j * (i - (h * (g * (f * (e / (d / (c - (b + a)))))))))))))))))))))))))); +} + +float func_97() +{ + double a = 0.6110518228926958f; + double b = 0.1938769175702466f; + double c = 1.1817405952202547f; + double d = 0.2688975590549294f; + double e = 0.9906964063774117f; + float f = 0.8497302140045534f; + float g = -0.518129726962695f; + float h = 1.2385600895951632f; + float i = -0.0820401833006214f; + float j = 0.36250262729161387f; + float k = -1.2159283723819838; + float l = 0.17695380340078434; + float m = 0.2069955034869908f; + float n = -0.4190901112400577f; + double o = -0.6991112869324665; + double p = -0.6587546254362419; + float q = -0.7822963389815436; + float r = -0.5328980180434191; + double s = -0.36240991034554465f; + float t = 2.804620455701347; + double u = -0.5453983916106073; + float v = 1.2056808521324194; + float w = -0.09573177591312221f; + float x = 1.0892079348583752; + double y = -0.7933385433364061; + float z = 0.4448538771985733f; + double A = -0.1308143720576843; + return (A / (z / (y / (x * (w * (v - (u + (t * (s - (r / (q + (p * (o / (n - (m - (l / (k * (j / (i * (h + (g / (f - (e / (d + (c + (b - a)))))))))))))))))))))))))); +} + +double func_98() +{ + float a = 1.713839582037652; + double b = -0.37215397935943956; + float c = -0.41194214757959025; + double d = -0.5970329211929375f; + double e = -0.2411947045343134; + double f = -1.0975742630033876; + double g = 0.32221108325836334; + double h = 0.21917105925068922f; + float i = 2.745906126998947; + float j = -1.7700198683571144; + double k = 1.7497324535309622f; + float l = -1.6287549195548439; + double m = 0.7932917435388808; + float n = -0.5020281905399467; + float o = -0.710715306581546; + double p = 0.9920136337165665f; + float q = -0.0557990393566418; + float r = 0.21870535624673673; + double s = -0.5746851624057866f; + float t = 0.007905174577607544; + double u = 0.7159905472537914; + double v = 0.14763692473794124; + float w = -0.7898525079422903; + float x = 1.579994736639336f; + double y = -1.3590599126992458f; + double z = 0.38549137064619676; + double A = -0.3816346680269807; + return (A * (z * (y / (x + (w - (v * (u * (t + (s + (r * (q / (p / (o / (n * (m - (l + (k * (j + (i * (h + (g - (f * (e / (d - (c - (b + a)))))))))))))))))))))))))); +} + +float func_99() +{ + double a = 0.9300494635562769f; + float b = 1.7639741990494628f; + double c = -2.2764329893279216; + float d = -0.44989329229115244; + double e = 1.1603550296900431; + double f = 0.25302949807124614f; + float g = -1.4687756140790083f; + float h = -0.3953996099517844; + double i = 0.4209306997929582f; + double j = 1.8665067160046611f; + float k = 0.508608918786931f; + double l = 1.4802446363654485; + double m = 0.28613941730185743f; + float n = 0.8851803085490272f; + double o = 0.5766941478348764; + float p = 0.38977168021152786f; + float q = 0.0866070783158686; + float r = -0.6161013914973956; + double s = 0.4762774235613597f; + float t = 0.7703310863553827; + double u = -1.0986502941375162; + double v = 0.262732056156036; + double w = 0.2041005367549802f; + double x = 0.05094681209510332; + double y = 0.7273537593701277; + double z = 1.100253359011246; + double A = 0.14747044450214605f; + return (A + (z * (y * (x * (w / (v / (u / (t - (s + (r * (q - (p - (o * (n - (m * (l / (k + (j / (i + (h / (g * (f + (e - (d * (c * (b - a)))))))))))))))))))))))))); +} + +int main() +{ + return (int)(func_0() - func_1() * func_2() / func_3() - func_4() + func_5() / func_6() / func_7() / func_8() / func_9() + func_10() / func_11() * func_12() / func_13() / func_14() + func_15() - func_16() - func_17() + func_18() / func_19() * func_20() - func_21() + func_22() * func_23() + func_24() - func_25() * func_26() * func_27() + func_28() / func_29() / func_30() / func_31() - func_32() / func_33() / func_34() - func_35() + func_36() * func_37() + func_38() / func_39() - func_40() * func_41() * func_42() + func_43() + func_44() - func_45() / func_46() / func_47() + func_48() - func_49() * func_50() * func_51() * func_52() / func_53() / func_54() - func_55() - func_56() - func_57() + func_58() * func_59() - func_60() * func_61() / func_62() / func_63() + func_64() * func_65() + func_66() / func_67() * func_68() + func_69() * func_70() - func_71() * func_72() / func_73() / func_74() + func_75() - func_76() / func_77() * func_78() * func_79() / func_80() - func_81() - func_82() + func_83() - func_84() * func_85() + func_86() - func_87() * func_88() - func_89() - func_90() * func_91() * func_92() + func_93() * func_94() - func_95() - func_96() - func_97() + func_98() - func_99()); +} + diff --git a/examples/c/float2_gen.py b/examples/c/float2_gen.py new file mode 100644 index 0000000..dd20472 --- /dev/null +++ b/examples/c/float2_gen.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +"""Make c program which uses floating point variables + +To make c program, execute `python3 float_gen.py > file_name.c` +""" + +import random + +def random_operator(): + ops = ["+", "-", "*", "/"] + return ops[random.randint(0, len(ops) - 1)] + +def random_dtype(): + dtypes = ["float", "double"] + return dtypes[random.randint(0, len(dtypes) - 1)] + +def random_suffix(): + suffixes = ["f", ""] + return suffixes[random.randint(0, len(suffixes) - 1)] + +def make_expr(vars): + if len(vars) == 1: + return vars[0] + else: + var = vars.pop() + return "(" + var + " " + random_operator() + " " + make_expr(vars) + ")" + +def make_func(i): + """Make a function that contains a conditional expression + """ + func_signature = random_dtype() + " func_" + str(i) + "()" + variables = "abcdefghijklmnopqrstuvwxyzA" + func_inner = [] + val_bitmap = [] + + # Variable initializiation + for var in variables: + val = random.gauss(0, 1) + val_bitmap.append(val) + decl = "\t" + random_dtype() + " " + var + " = " + str(val) + random_suffix() + ";" + func_inner.append(decl) + + func_inner.append("\treturn " + make_expr(list(variables)) + ";") + + return "\n".join([func_signature, "{"] + func_inner + ["}"]) + +if __name__ == "__main__": + src = "" + return_stmt = "\treturn (int)(" + NUM_FUNC = 100 + for i in range(NUM_FUNC): + src += make_func(i) + src += "\n\n" + return_stmt += "func_" + str(i) + "()" + return_stmt += " " + random_operator() + " " if i != (NUM_FUNC - 1) else ");" + src += "int main()\n{\n" + return_stmt + "\n}\n" + + print(src) diff --git a/examples/c/temp2.c b/examples/c/temp2.c index ab2b373..fd3ed93 100644 --- a/examples/c/temp2.c +++ b/examples/c/temp2.c @@ -1,22 +1,23 @@ struct color { int number; char name; }; -int f(int i, int const a[i]) { +int main() { int temp = 0; - const float temp2 = 0.f, temp3 = 0.f; - temp = sizeof(unsigned char); - temp = _Alignof(unsigned char); + temp += sizeof(unsigned char); + temp += _Alignof(unsigned char); - struct color c; - c.name; + struct color c = {1, 2}; + temp += c.name; struct color *cp = &c; - cp->name; + temp += cp->name; for(int i = 0, j = 0; i < 10; ++i) { - break; + if ( i == 2 && j == 0) break; + temp += i; } switch(temp) { case 1: { + temp = 0; break; } default: { diff --git a/src/c/write_c.rs b/src/c/write_c.rs index a701c2b..7922bf8 100644 --- a/src/c/write_c.rs +++ b/src/c/write_c.rs @@ -45,3 +45,9 @@ impl WriteLine for TranslationUnit { todo!("homework 1") } } + +impl WriteString for Initializer { + fn write_string(&self) -> String { + todo!() + } +} diff --git a/src/ir/dtype.rs b/src/ir/dtype.rs index d797185..eef371f 100644 --- a/src/ir/dtype.rs +++ b/src/ir/dtype.rs @@ -721,9 +721,22 @@ impl Dtype { } } + pub fn is_const(&self) -> bool { + match self { + Self::Unit { is_const } => *is_const, + Self::Int { is_const, .. } => *is_const, + Self::Float { is_const, .. } => *is_const, + Self::Pointer { is_const, .. } => *is_const, + Self::Array { .. } => true, + Self::Struct { is_const, .. } => *is_const, + Self::Function { .. } => true, + Self::Typedef { is_const, .. } => *is_const, + } + } + #[inline] /// Check if `Dtype` is constant. if it is constant, the variable of `Dtype` is not assignable. - pub fn is_const(&self, structs: &HashMap>) -> bool { + pub fn is_immutable(&self, structs: &HashMap>) -> bool { match self { Self::Unit { is_const } => *is_const, Self::Int { is_const, .. } => *is_const, @@ -751,9 +764,9 @@ impl Dtype { // If an array is wrapped in a struct and the array's inner type is not // constant, it is assignable to another object of the same struct type. if let Self::Array { inner, .. } = f.deref() { - inner.is_const_for_array_struct_field_inner(structs) + inner.is_immutable_for_array_struct_field_inner(structs) } else { - f.deref().is_const(structs) + f.deref().is_immutable(structs) } }) } @@ -762,14 +775,14 @@ impl Dtype { } } - fn is_const_for_array_struct_field_inner( + fn is_immutable_for_array_struct_field_inner( &self, structs: &HashMap>, ) -> bool { if let Self::Array { inner, .. } = self { - inner.is_const_for_array_struct_field_inner(structs) + inner.is_immutable_for_array_struct_field_inner(structs) } else { - self.is_const(structs) + self.is_immutable(structs) } } @@ -850,16 +863,23 @@ impl Dtype { field_name: &str, structs: &HashMap>, ) -> Option<(usize, Self)> { - if let Self::Struct { - fields, - size_align_offsets, - .. - } = self - { - let fields = fields.as_ref().expect("struct should have its definition"); - let (_, _, offsets) = size_align_offsets + if let Self::Struct { name, .. } = self { + let struct_name = name.as_ref().expect("`self` must have its name"); + let struct_type = structs + .get(struct_name) + .expect("`structs` must have value matched with `struct_name`") .as_ref() - .expect("struct should have `offsets` as `Some`"); + .expect("`struct_type` must have its definition"); + let fields = struct_type + .get_struct_fields() + .expect("`struct_type` must be struct type") + .as_ref() + .expect("`fields` must be `Some`"); + let (_, _, offsets) = struct_type + .get_struct_size_align_offsets() + .expect("`struct_type` must be struct type") + .as_ref() + .expect("`offsets` must be `Some`"); assert_eq!(fields.len(), offsets.len()); for (field, offset) in izip!(fields, offsets) { @@ -869,19 +889,8 @@ impl Dtype { } } else { let field_dtype = field.deref(); - let struct_name = field_dtype - .get_struct_name() - .expect("`field_dtype` must be struct type") - .as_ref() - .expect("structure type must have its name"); - let struct_type = structs - .get(struct_name) - .expect("`structs` must have value matched with `struct_name`") - .as_ref() - .expect("`struct_type` must have its definition"); - let (offset_inner, dtype) = some_or!( - struct_type.get_offset_struct_field(field_name, structs), + field_dtype.get_offset_struct_field(field_name, structs), continue ); return Some((*offset + offset_inner, dtype)); @@ -1115,7 +1124,7 @@ impl Dtype { message: format!("unknown type name `{}`", name), })? .clone(); - let is_const = dtype.is_const(structs) || *is_const; + let is_const = dtype.is_const() || *is_const; dtype.set_const(is_const) } diff --git a/src/ir/interp.rs b/src/ir/interp.rs index ea38c68..2d73512 100644 --- a/src/ir/interp.rs +++ b/src/ir/interp.rs @@ -2,6 +2,7 @@ use core::fmt; use core::iter; use core::mem; use failure::Fail; +use ordered_float::OrderedFloat; use std::collections::HashMap; use itertools::izip; @@ -33,7 +34,7 @@ pub enum Value { /// * Casting from an f32 to an f64 is perfect and lossless (f32 -> f64) /// * Casting from an f64 to an f32 will produce the closest possible value (f64 -> f32) /// https://doc.rust-lang.org/stable/reference/expressions/operator-expr.html#type-cast-expressions - value: f64, + value: OrderedFloat, width: usize, }, Pointer { @@ -67,10 +68,7 @@ impl TryFrom for Value { width, is_signed, }, - Constant::Float { value, width } => Self::Float { - value: value.into_inner(), - width, - }, + Constant::Float { value, width } => Self::Float { value, width }, _ => panic!(), }; @@ -125,7 +123,10 @@ impl Value { #[inline] fn float(value: f64, width: usize) -> Self { - Self::Float { value, width } + Self::Float { + value: value.into(), + width, + } } #[inline] @@ -421,6 +422,187 @@ mod calculator { use super::Value; use crate::ir::*; use lang_c::ast; + use std::cmp::Ordering; + + fn calculate_integer_binary_operator_expression( + op: &ast::BinaryOperator, + lhs: u128, + rhs: u128, + width: usize, + is_signed: bool, + ) -> Result { + let result = match op { + // TODO: explain why plus & minus do not need to consider `is_signed' + ast::BinaryOperator::Plus => (lhs as i128 + rhs as i128) as u128, + ast::BinaryOperator::Minus => (lhs as i128 - rhs as i128) as u128, + ast::BinaryOperator::Multiply => { + if is_signed { + (lhs as i128 * rhs as i128) as u128 + } else { + lhs * rhs + } + } + ast::BinaryOperator::Divide => { + assert!(rhs != 0); + if is_signed { + (lhs as i128 / rhs as i128) as u128 + } else { + lhs / rhs + } + } + ast::BinaryOperator::Modulo => { + assert!(rhs != 0); + if is_signed { + (lhs as i128 % rhs as i128) as u128 + } else { + lhs % rhs + } + } + ast::BinaryOperator::ShiftLeft => { + let rhs = if is_signed { + let rhs = rhs as i128; + assert!(rhs >= 0); + assert!(rhs < (width as i128)); + rhs as u128 + } else { + assert!(rhs < (width as u128)); + rhs + }; + + lhs << rhs + } + ast::BinaryOperator::ShiftRight => { + if is_signed { + // arithmetic shift right + let rhs = rhs as i128; + assert!(rhs >= 0); + assert!(rhs < (width as i128)); + ((lhs as i128) >> rhs) as u128 + } else { + // logical shift right + assert!(rhs < (width as u128)); + let bit_mask = (1u128 << width as u128) - 1; + let lhs = lhs & bit_mask; + lhs >> rhs + } + } + ast::BinaryOperator::BitwiseAnd => lhs & rhs, + ast::BinaryOperator::BitwiseXor => lhs ^ rhs, + ast::BinaryOperator::BitwiseOr => lhs | rhs, + ast::BinaryOperator::Equals => { + let result = if lhs == rhs { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::NotEquals => { + let result = if lhs != rhs { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::Less => { + let condition = if is_signed { + (lhs as i128) < (rhs as i128) + } else { + lhs < rhs + }; + let result = if condition { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::Greater => { + let condition = if is_signed { + (lhs as i128) > (rhs as i128) + } else { + lhs > rhs + }; + let result = if condition { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::LessOrEqual => { + let condition = if is_signed { + (lhs as i128) <= (rhs as i128) + } else { + lhs <= rhs + }; + let result = if condition { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::GreaterOrEqual => { + let condition = if is_signed { + (lhs as i128) >= (rhs as i128) + } else { + lhs >= rhs + }; + let result = if condition { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + _ => todo!( + "calculate_binary_operator_expression: not supported operator {:?}", + op + ), + }; + + let result = if is_signed { + sign_extension(result, width as u128) + } else { + trim_unnecessary_bits(result, width as u128) + }; + + Ok(Value::int(result, width, is_signed)) + } + + fn calculate_float_binary_operator_expression( + op: &ast::BinaryOperator, + lhs: OrderedFloat, + rhs: OrderedFloat, + width: usize, + ) -> Result { + let result = match op { + ast::BinaryOperator::Plus => lhs.into_inner() + rhs.into_inner(), + ast::BinaryOperator::Minus => lhs.into_inner() - rhs.into_inner(), + ast::BinaryOperator::Multiply => lhs.into_inner() * rhs.into_inner(), + ast::BinaryOperator::Divide => { + assert!(rhs.into_inner() != 0.0); + lhs.into_inner() / rhs.into_inner() + } + ast::BinaryOperator::Equals => { + let order = lhs + .partial_cmp(&rhs) + .expect("`lhs` and `rhs` must be not NAN"); + let result = if Ordering::Equal == order { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::NotEquals => { + let order = lhs + .partial_cmp(&rhs) + .expect("`lhs` and `rhs` must be not NAN"); + let result = if Ordering::Equal != order { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::Less => { + let result = if lhs.lt(&rhs) { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::Greater => { + let result = if lhs.gt(&rhs) { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::LessOrEqual => { + let result = if lhs.le(&rhs) { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + ast::BinaryOperator::GreaterOrEqual => { + let result = if lhs.ge(&rhs) { 1 } else { 0 }; + return Ok(Value::int(result, 1, false)); + } + _ => todo!( + "calculate_binary_operator_expression: not supported case for \ + {:?} {:?} {:?}", + op, + lhs, + rhs + ), + }; + + Ok(Value::float(result, width)) + } // TODO: change to template function in the future pub fn calculate_binary_operator_expression( @@ -428,11 +610,10 @@ mod calculator { lhs: Value, rhs: Value, ) -> Result { - match (op, lhs, rhs) { - (_, Value::Undef { .. }, _) => Err(()), - (_, _, Value::Undef { .. }) => Err(()), + match (lhs, rhs) { + (Value::Undef { .. }, _) => Err(()), + (_, Value::Undef { .. }) => Err(()), ( - op, Value::Int { value: lhs, width: lhs_w, @@ -447,121 +628,38 @@ mod calculator { assert_eq!(lhs_w, rhs_w); assert_eq!(lhs_s, rhs_s); - let result = match op { - // TODO: explain why plus & minus do not need to consider `is_signed' - ast::BinaryOperator::Plus => (lhs as i128 + rhs as i128) as u128, - ast::BinaryOperator::Minus => (lhs as i128 - rhs as i128) as u128, - ast::BinaryOperator::Multiply => { - if lhs_s { - (lhs as i128 * rhs as i128) as u128 - } else { - lhs * rhs - } - } - ast::BinaryOperator::Divide => { - if lhs_s { - (lhs as i128 / rhs as i128) as u128 - } else { - lhs / rhs - } - } - ast::BinaryOperator::Modulo => { - if lhs_s { - (lhs as i128 % rhs as i128) as u128 - } else { - lhs % rhs - } - } - ast::BinaryOperator::ShiftLeft => { - let rhs = if lhs_s { - let rhs = rhs as i128; - assert!(rhs >= 0); - assert!(rhs < (lhs_w as i128)); - rhs as u128 - } else { - assert!(rhs < (lhs_w as u128)); - rhs - }; - - lhs << rhs - } - ast::BinaryOperator::ShiftRight => { - if lhs_s { - // arithmetic shift right - let rhs = rhs as i128; - assert!(rhs >= 0); - assert!(rhs < (lhs_w as i128)); - ((lhs as i128) >> rhs) as u128 - } else { - // logical shift right - assert!(rhs < (lhs_w as u128)); - let bit_mask = (1u128 << lhs_w as u128) - 1; - let lhs = lhs & bit_mask; - lhs >> rhs - } - } - ast::BinaryOperator::BitwiseAnd => lhs & rhs, - ast::BinaryOperator::BitwiseXor => lhs ^ rhs, - ast::BinaryOperator::BitwiseOr => lhs | rhs, - ast::BinaryOperator::Equals => { - let result = if lhs == rhs { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - ast::BinaryOperator::NotEquals => { - let result = if lhs != rhs { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - ast::BinaryOperator::Less => { - let condition = if lhs_s { - (lhs as i128) < (rhs as i128) - } else { - lhs < rhs - }; - let result = if condition { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - ast::BinaryOperator::Greater => { - let condition = if lhs_s { - (lhs as i128) > (rhs as i128) - } else { - lhs > rhs - }; - let result = if condition { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - ast::BinaryOperator::LessOrEqual => { - let condition = if lhs_s { - (lhs as i128) <= (rhs as i128) - } else { - lhs <= rhs - }; - let result = if condition { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - ast::BinaryOperator::GreaterOrEqual => { - let condition = if lhs_s { - (lhs as i128) >= (rhs as i128) - } else { - lhs >= rhs - }; - let result = if condition { 1 } else { 0 }; - return Ok(Value::int(result, 1, false)); - } - _ => todo!( - "calculate_binary_operator_expression: not supported operator {:?}", - op - ), - }; - - let result = if lhs_s { - sign_extension(result, lhs_w as u128) - } else { - trim_unnecessary_bits(result, lhs_w as u128) - }; - - Ok(Value::int(result, lhs_w, lhs_s)) + calculate_integer_binary_operator_expression(op, lhs, rhs, lhs_w, lhs_s) } - (op, lhs, rhs) => todo!( + ( + Value::Float { + value: lhs, + width: lhs_w, + }, + Value::Float { + value: rhs, + width: rhs_w, + }, + ) => { + assert_eq!(lhs_w, rhs_w); + + calculate_float_binary_operator_expression(op, lhs, rhs, lhs_w) + } + (Value::Pointer { bid, .. }, Value::Pointer { bid: other_bid, .. }) => match op { + ast::BinaryOperator::Equals => { + let result = if bid == other_bid { 1 } else { 0 }; + Ok(Value::int(result, 1, false)) + } + ast::BinaryOperator::NotEquals => { + let result = if bid != other_bid { 1 } else { 0 }; + Ok(Value::int(result, 1, false)) + } + _ => todo!( + "calculate_binary_operator_expression: not supported case for \ + {:?} between pointer and integer value", + op, + ), + }, + (lhs, rhs) => todo!( "calculate_binary_operator_expression: not supported case for {:?} {:?} {:?}", op, lhs, @@ -574,48 +672,47 @@ mod calculator { op: &ast::UnaryOperator, operand: Value, ) -> Result { - match (op, operand) { - (_, Value::Undef { .. }) => Err(()), - ( - ast::UnaryOperator::Plus, - Value::Int { - value, - width, - is_signed, - }, - ) => Ok(Value::int(value, width, is_signed)), - ( - ast::UnaryOperator::Minus, - Value::Int { - value, - width, - is_signed, - }, - ) => { - // TODO: check what is exact behavior of appling minus to unsigned value - let result = if is_signed { - (-(value as i128)) as u128 - } else { - let result = (-(value as i128)) as u128; - let bit_mask = (1u128 << (width as u128)) - 1; - result & bit_mask - }; - Ok(Value::int(result as u128, width, is_signed)) + match operand { + Value::Undef { .. } => Err(()), + Value::Int { + value, + width, + is_signed, + } => { + match op { + ast::UnaryOperator::Plus => Ok(Value::int(value, width, is_signed)), + ast::UnaryOperator::Minus => { + let result = if is_signed { + (-(value as i128)) as u128 + } else { + let value = (-(value as i128)) as u128; + trim_unnecessary_bits(value, width as u128) + }; + Ok(Value::int(result as u128, width, is_signed)) + } + ast::UnaryOperator::Negate => { + // Check if it is boolean + assert!(width == 1); + let result = if value == 0 { 1 } else { 0 }; + Ok(Value::int(result, width, is_signed)) + } + _ => todo!( + "calculate_unary_operator_expression: not supported case for {:?} {:?}", + op, + operand, + ), + } } - ( - ast::UnaryOperator::Negate, - Value::Int { - value, - width, - is_signed, - }, - ) => { - // Check if it is boolean - assert!(width == 1); - let result = if value == 0 { 1 } else { 0 }; - Ok(Value::int(result, width, is_signed)) - } - (op, operand) => todo!( + Value::Float { value, width } => match op { + ast::UnaryOperator::Plus => Ok(Value::float(value.into_inner(), width)), + ast::UnaryOperator::Minus => Ok(Value::float(-value.into_inner(), width)), + _ => todo!( + "calculate_unary_operator_expression: not supported case for {:?} {:?}", + op, + operand, + ), + }, + _ => todo!( "calculate_unary_operator_expression: not supported case for {:?} {:?}", op, operand, @@ -630,8 +727,6 @@ mod calculator { match (value, dtype) { (Value::Undef { .. }, _) => Err(()), - // TODO: distinguish zero/signed extension in the future - // TODO: consider truncate in the future ( Value::Int { value, width, .. }, Dtype::Int { @@ -640,7 +735,6 @@ mod calculator { .. }, ) => { - // Other cases let result = if target_signed { if width >= target_width { // TODO: explain the logic in the future @@ -668,6 +762,17 @@ mod calculator { }; Ok(Value::float(casted_value, width)) } + (Value::Int { value, .. }, Dtype::Pointer { inner, .. }) => { + if value == 0 { + Ok(Value::pointer(None, 0, inner.deref().clone())) + } else { + panic!(format!( + "calculate_typecast: not support case \ + typecast int to pointer when `value` is {}", + value + )) + } + } ( Value::Float { value, .. }, Dtype::Int { @@ -675,14 +780,14 @@ mod calculator { }, ) => { let casted_value = if is_signed { - value as i128 as u128 + value.into_inner() as i128 as u128 } else { - value as u128 + value.into_inner() as u128 }; Ok(Value::int(casted_value, width, is_signed)) } (Value::Float { value, .. }, Dtype::Float { width, .. }) => { - Ok(Value::float(value, width)) + Ok(Value::float(value.into_inner(), width)) } (value, dtype) => todo!("calculate_typecast ({:?}) {:?}", value, dtype), } @@ -706,12 +811,15 @@ mod calculator { } } -// TODO -#[allow(dead_code)] +// TODO: delete `allow(dead_code)` +/// Even though `Pointer` variant is constructed and actively used at run-time, +/// the rust compiler analyzes it is dead code. +/// For this reason, we add `allow(dead_code)` mark. #[derive(Debug, PartialEq, Eq, Hash, Clone)] enum Byte { Undef, Concrete(u8), + #[allow(dead_code)] Pointer { bid: Option, offset: isize, @@ -921,8 +1029,8 @@ impl Byte { } => { let size = value.dtype().size_align_of(structs).unwrap().0; let value_bits: u128 = match size { - Dtype::SIZE_OF_FLOAT => (*float_value as f32).to_bits() as u128, - Dtype::SIZE_OF_DOUBLE => (*float_value as f64).to_bits() as u128, + Dtype::SIZE_OF_FLOAT => (float_value.into_inner() as f32).to_bits() as u128, + Dtype::SIZE_OF_DOUBLE => (float_value.into_inner() as f64).to_bits() as u128, _ => panic!("value_to_bytes: {} is not a valid float size", size), }; @@ -1045,8 +1153,6 @@ impl Memory { } } -// TODO: allocation fields will be added in the future -// TODO: program fields will be added in the future #[derive(Debug, PartialEq)] struct State<'i> { /// A data structure that maps each global variable to a pointer value diff --git a/src/ir/mod.rs b/src/ir/mod.rs index d28975c..fe30ae5 100644 --- a/src/ir/mod.rs +++ b/src/ir/mod.rs @@ -186,7 +186,6 @@ pub struct Block { #[derive(Debug, PartialEq, Clone)] #[allow(clippy::large_enum_variant)] pub enum Instruction { - // TODO: the variants of Instruction will be added in the future Nop, BinOp { op: ast::BinaryOperator, @@ -255,7 +254,6 @@ impl Instruction { } } -// TODO #[derive(Debug, PartialEq, Clone)] pub enum BlockExit { Jump { diff --git a/src/ir/write_ir.rs b/src/ir/write_ir.rs index a55ae06..46a533d 100644 --- a/src/ir/write_ir.rs +++ b/src/ir/write_ir.rs @@ -198,7 +198,6 @@ impl WriteString for Operand { impl WriteOp for ast::BinaryOperator { fn write_operation(&self) -> String { - // TODO: represent signed & unsigned if necessary match self { Self::Multiply => "mul", Self::Divide => "div", diff --git a/src/tests.rs b/src/tests.rs index 36a3cc2..2b0451d 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -8,6 +8,10 @@ use wait_timeout::ChildExt; use crate::*; +// Rust sets an exit code of 101 when the process panicked. +// So, we decide KECC sets an exit code of 102 after 101 when the test skipped. +pub const SKIP_TEST: i32 = 102; + pub fn test_write_c(unit: &TranslationUnit, _path: &Path) { let temp_dir = tempdir().expect("temp dir creation failed"); let temp_file_path = temp_dir.path().join("temp.c"); @@ -43,7 +47,7 @@ pub fn test_irgen(unit: &TranslationUnit, path: &Path) { .unwrap() .success() { - return; + ::std::process::exit(SKIP_TEST); } // Execute compiled executable @@ -64,10 +68,10 @@ pub fn test_irgen(unit: &TranslationUnit, path: &Path) { println!("timeout occurs"); child.kill().unwrap(); child.wait().unwrap(); - return; + ::std::process::exit(SKIP_TEST); } ); - let status = some_or!(status.code(), return); + let status = some_or_exit!(status.code(), SKIP_TEST); let ir = match Irgen::default().translate(unit) { Ok(ir) => ir, diff --git a/tests/fuzz.py b/tests/fuzz.py index 5ed95f9..24e383c 100644 --- a/tests/fuzz.py +++ b/tests/fuzz.py @@ -48,6 +48,7 @@ REPLACE_DICT = { "char _unused2[^;]*;": "char _unused2[10];", } CSMITH_DIR = "csmith-2.3.0" +SKIP_TEST = 102 def install_csmith(tests_dir): global CSMITH_DIR @@ -200,17 +201,20 @@ def creduce(tests_dir, fuzz_arg): raise e def fuzz(tests_dir, fuzz_arg, num_iter): + global SKIP_TEST + csmith_bin, csmith_inc = install_csmith(tests_dir) try: if num_iter is None: print("Fuzzing with infinitely many test cases. Please press [ctrl+C] to break.") - iterator = itertools.count(0) else: + assert num_iter > 0 print("Fuzzing with {} test cases.".format(num_iter)) - iterator = range(num_iter) - for i in iterator: - print("Test case #{}".format(i)) + i = 0 + skip = 0 + while True: + print("Test case #{} (skipped: {})".format(i, skip)) src = generate(tests_dir, csmith_bin) with open(os.path.join(tests_dir, "test.c"), 'w') as dst: dst.write(src) @@ -223,11 +227,20 @@ def fuzz(tests_dir, fuzz_arg, num_iter): args = ["cargo", "run", "--release", "--bin", "fuzz", "--", fuzz_arg, os.path.join(tests_dir, "test_polished.c")] proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tests_dir) proc.communicate(timeout=60) - if proc.returncode != 0: + + # KECC sets an exit code of 102 when the test skipped. + if proc.returncode == SKIP_TEST: + skip += 1 + continue + elif proc.returncode != 0: raise Exception("Test `{}` failed with exit code {}.".format(" ".join(args), proc.returncode)) + + i += 1 + if num_iter is not None: + if i > num_iter: break except subprocess.TimeoutExpired as e: proc.kill() - raise e + skip += 1 except KeyboardInterrupt: proc.terminate() print("\n[Ctrl+C] interrupted") diff --git a/tests/reduce-criteria-template.sh b/tests/reduce-criteria-template.sh index 79af9ec..d43a352 100644 --- a/tests/reduce-criteria-template.sh +++ b/tests/reduce-criteria-template.sh @@ -29,6 +29,7 @@ if grep 'non-void function does not return a value' out.txt ||\ grep 'too many arguments in call' out.txt ||\ grep 'declaration does not declare anything' out.txt ||\ + grep 'not equal to a null pointer is always true' out.txt ||\ ! gcc -Wall -Wextra -O2 test_reduced.c > outa.txt 2>&1 ||\ grep 'uninitialized' outa.txt ||\ grep 'without a cast' outa.txt ||\