open Core.Std
exception Error of string
type t = int
let offset = 64
let to_probability t =
let z = 10. ** (Float.of_int t /. -10.) in
z /. (1. +. z)
let to_ascii t =
let x = t + offset in
if 33 <= x && x <= 126 then
Char.of_int_exn x
else
Error (sprintf "%d cannot be encoded as a visible ASCII character" t) |> raise
let of_ascii x =
let c = Char.to_int x in
if 33 <= c && c <= 126 then
c - offset
else
Error (sprintf "%c is not a valid score" x) |> raise
let of_probability ?(f = Float.iround_nearest_exn) x =
if 0.0 <= x && x <= 1.0 then
f (-10. *. log10(x /. (1. -. x)))
else
Error (sprintf "invalid probability %0.17g" x) |> raise