12345678910111213141516171819202122232425262728openApronmoduleS=ScalarextincludeIntervalletjoinab={inf=ifScalar.cmpa.infb.inf<0thena.infelseb.inf;sup=ifScalar.cmpa.supb.sup>0thena.supelseb.sup;}letto_floata=(S.to_floata.inf),(S.to_floata.sup)letto_mpqfa=(S.to_mpqfa.inf),(S.to_mpqfa.sup)(** scalar range of an interval *)letrangea=S.suba.supa.inf(** same as range but result as an mpqf *)letrange_mpqfa=S.suba.supa.inf|>S.to_mpqf(** midpoint of an interval *)letmida=S.adda.inf(S.div(S.suba.supa.inf)(S.of_int2))(** Random uniform value within an interval, according to the type *)letspawn({inf;sup}:t)=letinf=S.to_mpqfinfandsup=S.to_mpqfsupinletr=Mpqf.of_float(Random.float1.)inMpqf.addinf(Mpqf.mul(Mpqf.subsupinf)r)