HairBSDF, gamma for a refracted ray

Time bar (total: 4.9s)

analyze184.0ms (3.8%)

Memory
-6.1MiB live, 74.3MiB allocated
Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%6.3%93.7%0%0%0%0
0%0%6.3%93.7%0%0%0%1
0%0%6.3%93.7%0%0%0%2
0%0%6.3%93.7%0%0%0%3
0%0%6.3%93.7%0%0%0%4
0%0%6.3%93.7%0%0%0%5
12.5%0.8%5.5%93.7%0%0%0%6
12.5%0.8%5.5%93.7%0%0%0%7
16.7%1%4.9%93.7%0%0.4%0%8
23.7%1.4%4.4%93.7%0%0.5%0%9
26.2%1.4%3.9%93.7%0%1%0%10
33.9%1.5%3%93.7%0%1.8%0%11
38.9%1.7%2.7%93.7%0%1.9%0%12
Compiler

Compiled 42 to 29 computations (31% saved)

sample4.4s (91.2%)

Memory
52.4MiB live, 1 377.3MiB allocated
Samples
756.0ms8 256×0valid-baseline
661.0ms8 256×0valid-rival
593.0ms8 256×0valid-sollya
Precisions
Click to see Rival histograms. Total time spent on operations: 873.0ms
ival-sqrt: 208.0ms (23.8% of total)
ival-mult: 193.0ms (22.1% of total)
ival-div: 183.0ms (21% of total)
ival-sub: 146.0ms (16.7% of total)
ival-asin: 115.0ms (13.2% of total)
ival-true: 15.0ms (1.7% of total)
...in/eval/compile.rkt:76:19: 6.0ms (0.7% of total)
ival-assert: 6.0ms (0.7% of total)
Precisions
Click to see Base histograms. Total time spent on operations: 921.0ms
ival-mult: 227.0ms (24.6% of total)
ival-sqrt: 222.0ms (24.1% of total)
ival-div: 181.0ms (19.6% of total)
ival-sub: 157.0ms (17% of total)
ival-asin: 112.0ms (12.2% of total)
const: 22.0ms (2.4% of total)
Bogosity

preprocess209.0ms (4.3%)

Memory
-2.9MiB live, 28.1MiB allocated
Algorithm
egg-herbie
Rules
1 562×fmm-def
1 486×fma-define
1 088×sub-neg
646×div-sub
570×unsub-neg
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
060856
1127856
2239856
3539856
41111856
52527856
63662856
75175856
86452856
97271856
107740856
Stop Event
node limit
Calls
Call 1
Inputs
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)))))))))
(asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 (neg.f32 eta) (neg.f32 eta)) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O))))))))))
(neg.f32 (asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 (neg.f32 eta) (neg.f32 eta)) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 sinTheta_O (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 h h) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 h h))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 sinTheta_O sinTheta_O) (/.f32 (*.f32 eta eta) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 eta eta))))))))
(asin.f32 (/.f32 eta (sqrt.f32 (-.f32 (*.f32 h h) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
Outputs
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta)))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta)))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta)))))
(asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta)))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 (neg.f32 eta) (neg.f32 eta)) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta)))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O)) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 (neg.f32 sinTheta_O) (neg.f32 sinTheta_O))))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta))))))
(neg.f32 (asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(neg.f32 (asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))))
(neg.f32 (asin.f32 (/.f32 (neg.f32 h) (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 (neg.f32 eta) (neg.f32 eta)) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))))
(neg.f32 (asin.f32 (/.f32 h (sqrt.f32 (fma.f32 sinTheta_O (/.f32 sinTheta_O (neg.f32 (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))) (*.f32 eta eta))))))
(asin.f32 (/.f32 sinTheta_O (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 h h) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 h h))))))))
(asin.f32 (/.f32 sinTheta_O (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 h h) (sqrt.f32 (neg.f32 (fma.f32 h h #s(literal -1 binary32)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 sinTheta_O sinTheta_O) (/.f32 (*.f32 eta eta) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 eta eta))))))))
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 sinTheta_O sinTheta_O) (*.f32 eta (/.f32 eta (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 eta eta)))))))))
(asin.f32 (/.f32 h (sqrt.f32 (fma.f32 (neg.f32 eta) (/.f32 eta (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 eta eta)))) (*.f32 sinTheta_O sinTheta_O)))))
(asin.f32 (/.f32 eta (sqrt.f32 (-.f32 (*.f32 h h) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 eta (sqrt.f32 (fma.f32 h h (/.f32 (*.f32 sinTheta_O (neg.f32 sinTheta_O)) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
(asin.f32 (/.f32 eta (sqrt.f32 (-.f32 (*.f32 h h) (*.f32 sinTheta_O (/.f32 sinTheta_O (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O)))))))))
Symmetry

(abs sinTheta_O)

(abs eta)

Compiler

Compiled 21 to 13 computations (38.1% saved)

eval0.0ms (0%)

Memory
0.2MiB live, 0.2MiB allocated
Compiler

Compiled 3 to 3 computations (0% saved)

prune1.0ms (0%)

Memory
0.9MiB live, 0.9MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
94.9%
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
Compiler

Compiled 42 to 26 computations (38.1% saved)

simplify3.0ms (0.1%)

Memory
0.8MiB live, 0.8MiB allocated
Algorithm
egg-herbie
Rules
12×sub-neg
12×+-commutative
*-commutative
neg-sub0
neg-mul-1
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02076
13276
24576
35376
45876
55976
Stop Event
saturated
Calls
Call 1
Inputs
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))
Outputs
(asin.f32 (/.f32 h (sqrt.f32 (-.f32 (*.f32 eta eta) (/.f32 (*.f32 sinTheta_O sinTheta_O) (sqrt.f32 (-.f32 #s(literal 1 binary32) (*.f32 sinTheta_O sinTheta_O))))))))

soundness0.0ms (0%)

Memory
0.3MiB live, 0.3MiB allocated
Stop Event
fuel
Compiler

Compiled 21 to 13 computations (38.1% saved)

preprocess30.0ms (0.6%)

Memory
-7.9MiB live, 26.0MiB allocated
Remove

(abs eta)

(abs sinTheta_O)

Compiler

Compiled 252 to 156 computations (38.1% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...