123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114(* This file is free software, part of containers. See file "license" for more details. *)typet=floattypefpclass=Stdlib.fpclass=|FP_normal|FP_subnormal|FP_zero|FP_infinite|FP_nanmoduleInfix=structlet(=):t->t->bool=Stdlib.(=)let(<>):t->t->bool=Stdlib.(<>)let(<):t->t->bool=Stdlib.(<)let(>):t->t->bool=Stdlib.(>)let(<=):t->t->bool=Stdlib.(<=)let(>=):t->t->bool=Stdlib.(>=)let(~-):t->t=Stdlib.(~-.)let(+):t->t->t=Stdlib.(+.)let(-):t->t->t=Stdlib.(-.)let(*):t->t->t=Stdlib.(*.)let(/):t->t->t=Stdlib.(/.)endincludeInfix[@@@ocaml.warning"-32"]letnan=Stdlib.nanletinfinity=Stdlib.infinityletneg_infinity=Stdlib.neg_infinityletmax_value=infinityletmin_value=neg_infinityletmax_finite_value=Stdlib.max_floatletepsilon=Stdlib.epsilon_floatletpi=0x1.921fb54442d18p+1letis_nanx=Stdlib.(classify_floatx=Stdlib.FP_nan)letadd=(+.)letsub=(-.)letmul=(*.)letdiv=(/.)letneg=(~-.)letabs=Stdlib.abs_floatletscale=(*.)letmin(x:t)y=matchStdlib.classify_floatx,Stdlib.classify_floatywith|FP_nan,_->y|_,FP_nan->x|_->ifx<ythenxelseyletmax(x:t)y=matchStdlib.classify_floatx,Stdlib.classify_floatywith|FP_nan,_->y|_,FP_nan->x|_->ifx>ythenxelseyletequal(a:float)b=a=blethash:t->int=Hashtbl.hashletcompare(a:float)b=Stdlib.compareab[@@@ocaml.warning"+32"]type'aprinter=Format.formatter->'a->unittype'arandom_gen=Random.State.t->'aletpp=Format.pp_print_floatletfsigna=ifis_nanathennanelseifa=0.thenaelseStdlib.copysign1.aexceptionTrapNaNofstringletsign_exn(a:float)=ifis_nanathenraise(TrapNaN"sign_exn")elsecomparea0.letroundx=letlow=floorxinlethigh=ceilxinifx-.low>high-.xthenhighelselowletto_int(a:float)=Stdlib.int_of_floataletof_int(a:int)=Stdlib.float_of_intaletto_string(a:float)=Stdlib.string_of_floataletof_string_exn(a:string)=Stdlib.float_of_stringaletof_string_opt(a:string)=trySome(Stdlib.float_of_stringa)withFailure_->Noneletrandomnst=Random.State.floatstnletrandom_small=random100.0letrandom_rangeijst=i+.random(j-.i)stletequal_precision~epsilonab=abs_float(a-.b)<epsilonletclassify=Stdlib.classify_float