JSFiddle - React, Tailwind, and code Playground
HTML
<a href="http://math.stackexchange.com/questions/2046492/how-likely-are-two-events-to-occur-at-the-same-time">
http://math.stackexchange.com/questions/2046492/how-likely-are-two-events-to-occur-at-the-same-time/2046839</a>
<p>
L<input id="L" value="100"><br>
n1<input id="n1" value="3"><br>
n2<input id="n2" value="8"><br>
t1<input id="t1" value="4"><br>
t2<input id="t2" value="2.3"><br>
<button onclick="restartSimul();return false">restart</button>
<button onclick="stopx();return false">stop</button>
<p>
p overlap=<span id="pov"></span><br>
n1*= <span id="n1x"></span><br>
n2*= <span id="n2x"></span><br>
iters= <span id="iters"></span><br>
JavaScript
var stop=0;
var t1,t2,r1,r2,l1,l2,tc,L;
var nc1a=0,nc2a=0;
var x1=0,x2=0;
var iter=0,overlaps=0;
function exponential(lambda) {
return -Math.log(Math.random())/lambda;
}
function stopx() {
stop=1;
}
function iterx() {
var ov = 0;
if(stop) return;
while(x1<L && x2<L) {
if(x1<x2) {x1 += exponential(l1)+t1; nc1a++;}
else {x2 += exponential(l2)+t2; nc2a++;}
if(Math.abs(x1-x2)<tc) ov++;
}
//console.log("iterating x1="+x1 + " x2=" +x2 + "ov=" +ov);
if(ov>0) {
overlaps++;
}
iter ++;
x1 -= L;
x2 -= L;
document.getElementById('pov').innerHTML = (overlaps/iter).toFixed(4);
document.getElementById('n1x').innerHTML = (nc1a/iter).toFixed(2);
document.getElementById('n2x').innerHTML = (nc2a/iter).toFixed(2);
document.getElementById('iters').innerHTML = iter;
setTimeout(this.iterx, 10);
}
function restartSimul() {
console.log("restarting" );
stop = 0;
nc1a=0,nc2a=0;
x1=0,x2=0;
iter=0,overlaps=0;
t1 = parseFloat(document.getElementById("t1").value);
t2 = parseFloat(document.getElementById("t2").value);
tc = (t1+t2)/2.0;
L = parseFloat(document.getElementById("L").value);
r1 = parseFloat(document.getElementById("n1").value)/L;
r2 = parseFloat(document.getElementById("n2").value)/L;
l1 = r1/(1-r1*t1);
l2 = r2/(1-r2*t2);
console.log("t1=" + t1 + " t2=" + t2 + " r1=" + r1 + " r2=" + r2 + " l1=" + l1 + " l2=" +l2 );
if(l1<=0 || l2 <=0) {alert("Bad values. see console "); stop=1;}
iterx();
}