Disney BSSRDF, PDF of scattering profile

Time bar (total: 25.9s)

analyze34.0ms (0.1%)

Memory
-3.5MiB live, 12.3MiB allocated
Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%2.1%97.9%0%0%0%0
0%0%2.1%97.9%0%0%0%1
50%1%1%97.9%0%0%0%2
50%1%1%97.9%0%0%0%3
75%1.5%0.5%97.9%0%0%0%4
75%1.5%0.5%97.9%0%0%0%5
87.5%1.8%0.3%97.9%0%0%0%6
87.5%1.8%0.3%97.9%0%0%0%7
93.7%1.9%0.1%97.9%0%0%0%8
93.7%1.9%0.1%97.9%0%0%0%9
96.9%2%0.1%97.9%0%0%0%10
96.9%2%0.1%97.9%0%0%0%11
98.4%2%0%97.9%0%0%0%12
Compiler

Compiled 71 to 53 computations (25.4% saved)

sample25.7s (99.3%)

Memory
55.7MiB live, 5 331.8MiB allocated
Samples
5.6s7 765×0valid-sollya
1.2s7 765×0valid-baseline
1.1s7 765×0valid-rival
78.0ms491×0valid-rival+baseline-zero
Precisions
Click to see Rival histograms. Total time spent on operations: 918.0ms
ival-mult: 413.0ms (45% of total)
ival-div: 226.0ms (24.6% of total)
ival-exp: 134.0ms (14.6% of total)
ival-neg: 46.0ms (5% of total)
ival-add: 37.0ms (4% of total)
ival-pi: 31.0ms (3.4% of total)
...in/eval/compile.rkt:110:19: 16.0ms (1.7% of total)
ival-true: 10.0ms (1.1% of total)
ival-assert: 5.0ms (0.5% of total)
Precisions
Click to see Base histograms. Total time spent on operations: 949.0ms
ival-mult: 431.0ms (45.4% of total)
ival-div: 231.0ms (24.3% of total)
ival-exp: 129.0ms (13.6% of total)
ival-neg: 44.0ms (4.6% of total)
ival-add: 41.0ms (4.3% of total)
ival-pi: 39.0ms (4.1% of total)
const: 33.0ms (3.5% of total)
Bogosity

preprocess93.0ms (0.4%)

Memory
-8.4MiB live, 22.1MiB allocated
Algorithm
egg-herbie
Rules
1 764×times-frac
1 088×fmm-def
976×distribute-frac-neg2
820×distribute-lft-neg-out
646×distribute-rgt-neg-out
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
074943
1230771
21095606
35165606
Stop Event
node limit
Calls
Call 1
Inputs
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (neg.f32 s)))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) (neg.f32 s)) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s))))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) (neg.f32 s)) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) (neg.f32 r))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) (neg.f32 r))))
(neg.f32 (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (neg.f32 s)))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) (neg.f32 s)) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s))))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) (neg.f32 s)) r))))
(neg.f32 (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) (neg.f32 r))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) (neg.f32 r)))))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 s) r))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) r) s)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 s) (*.f32 #s(literal 3 binary32) r)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) r) s)))
Outputs
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
(+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 s (*.f32 #s(literal 2 binary32) (PI.f32)))) (/.f32 (exp.f32 (neg.f32 (/.f32 r s))) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 s #s(literal 3 binary32)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) s))))))
(fma.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (*.f32 #s(literal -1/3 binary32) (/.f32 r s))) r) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (neg.f32 s))) r)))
(*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (exp.f32 (/.f32 r (neg.f32 s))) r) (/.f32 (pow.f32 (exp.f32 #s(literal -1/3 binary32)) (/.f32 r s)) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
(+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 s (*.f32 #s(literal 2 binary32) (PI.f32)))) (/.f32 (exp.f32 (neg.f32 (/.f32 r s))) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 s #s(literal 3 binary32)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) s))))))
(fma.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (*.f32 #s(literal -1/3 binary32) (/.f32 r s))) r) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (neg.f32 s))) r)))
(*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (exp.f32 (/.f32 r (neg.f32 s))) r) (/.f32 (pow.f32 (exp.f32 #s(literal -1/3 binary32)) (/.f32 r s)) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (neg.f32 s)))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) (neg.f32 s)) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s))))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) (neg.f32 s)) r)))
(+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 #s(literal 2 binary32) (*.f32 (PI.f32) (neg.f32 s)))) (/.f32 (exp.f32 (/.f32 r s)) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) (neg.f32 s)))))))
(fma.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r s)) (neg.f32 r)) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (*.f32 s #s(literal 3 binary32)))) (neg.f32 r))))
(*.f32 (/.f32 #s(literal -1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (exp.f32 (/.f32 r s)) r) (/.f32 (cbrt.f32 (exp.f32 (/.f32 r s))) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) (neg.f32 r))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) (neg.f32 r))))
(+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 #s(literal 2 binary32) (*.f32 (PI.f32) (neg.f32 s)))) (/.f32 (exp.f32 (/.f32 r s)) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) (neg.f32 s)))))))
(fma.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r s)) (neg.f32 r)) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (*.f32 s #s(literal 3 binary32)))) (neg.f32 r))))
(*.f32 (/.f32 #s(literal -1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (exp.f32 (/.f32 r s)) r) (/.f32 (cbrt.f32 (exp.f32 (/.f32 r s))) r)))
(neg.f32 (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (neg.f32 s)))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) (neg.f32 s)) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s))))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) (neg.f32 s)) r))))
(neg.f32 (+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 #s(literal 2 binary32) (*.f32 (PI.f32) (neg.f32 s)))) (/.f32 (exp.f32 (/.f32 r s)) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) (neg.f32 s))))))))
(+.f32 (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (*.f32 s #s(literal 3 binary32)))) r)) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r s)) r)))
(*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (cbrt.f32 (exp.f32 (/.f32 r s))) r) (/.f32 (exp.f32 (/.f32 r s)) r)))
(neg.f32 (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) (neg.f32 r))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 (neg.f32 r)) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) (neg.f32 r)))))
(neg.f32 (+.f32 (*.f32 (/.f32 #s(literal 1/4 binary32) (*.f32 #s(literal 2 binary32) (*.f32 (PI.f32) (neg.f32 s)))) (/.f32 (exp.f32 (/.f32 r s)) r)) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) (neg.f32 s)))) (*.f32 r (*.f32 #s(literal 6 binary32) (*.f32 (PI.f32) (neg.f32 s))))))))
(+.f32 (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r (*.f32 s #s(literal 3 binary32)))) r)) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (/.f32 (exp.f32 (/.f32 r s)) r)))
(*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 s (PI.f32))) (+.f32 (/.f32 (cbrt.f32 (exp.f32 (/.f32 r s))) r) (/.f32 (exp.f32 (/.f32 r s)) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 s) r))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) r) s)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 s) (*.f32 #s(literal 3 binary32) r)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) r) s)))
(+.f32 (*.f32 #s(literal 1/4 binary32) (/.f32 (exp.f32 (neg.f32 (/.f32 s r))) (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) (*.f32 r s)))) (*.f32 #s(literal 3/4 binary32) (/.f32 (exp.f32 (/.f32 (neg.f32 s) (*.f32 r #s(literal 3 binary32)))) (*.f32 (*.f32 (PI.f32) #s(literal 6 binary32)) (*.f32 r s)))))
(fma.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 r (PI.f32))) (/.f32 (exp.f32 (*.f32 #s(literal -1/3 binary32) (/.f32 s r))) s) (*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 r (PI.f32))) (/.f32 (exp.f32 (/.f32 s (neg.f32 r))) s)))
(*.f32 (/.f32 #s(literal 1/8 binary32) (*.f32 r (PI.f32))) (+.f32 (/.f32 (exp.f32 (/.f32 s (neg.f32 r))) s) (/.f32 (pow.f32 (exp.f32 #s(literal -1/3 binary32)) (/.f32 s r)) s)))
Compiler

Compiled 35 to 25 computations (28.6% saved)

eval0.0ms (0%)

Memory
0.2MiB live, 0.2MiB allocated
Compiler

Compiled 2 to 2 computations (0% saved)

prune1.0ms (0%)

Memory
1.1MiB live, 1.1MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.5%
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
Compiler

Compiled 70 to 50 computations (28.6% saved)

simplify4.0ms (0%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
031129
149129
259129
373129
481129
585129
686129
Stop Event
saturated
Calls
Call 1
Inputs
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
Outputs
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r)))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 r (*.f32 s (*.f32 #s(literal 2 binary32) (PI.f32))))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 s #s(literal 3 binary32))))) (*.f32 r (*.f32 s (*.f32 (PI.f32) #s(literal 6 binary32))))))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 r (neg.f32 s)))) (*.f32 r (*.f32 s (*.f32 #s(literal 2 binary32) (PI.f32))))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 s #s(literal 3 binary32))))) (*.f32 r (*.f32 s (*.f32 (PI.f32) #s(literal 6 binary32))))))
(+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 r (neg.f32 s)))) (*.f32 r (*.f32 s (*.f32 #s(literal 2 binary32) (PI.f32))))) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 r (*.f32 s (neg.f32 #s(literal 3 binary32)))))) (*.f32 r (*.f32 s (*.f32 (PI.f32) #s(literal 6 binary32))))))

soundness0.0ms (0%)

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

Compiled 35 to 26 computations (25.7% saved)

preprocess36.0ms (0.1%)

Memory
-6.0MiB live, 28.2MiB allocated
Compiler

Compiled 140 to 102 computations (27.1% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...