Skip to content

Instantly share code, notes, and snippets.

View kayceesrk's full-sized avatar

KC Sivaramakrishnan kayceesrk

View GitHub Profile
@kayceesrk
kayceesrk / code.ml
Last active September 9, 2025 06:51
type 'a state = Unfilled of task list | Filled of 'a
type 'a t = 'a state ref
let create () = ref (Unfilled [])
let rec try_fill promise value =
let old_state = !promise in
match old_state with
| Filled _ -> false
| Unfilled tasklist ->
d.file ""
// Assembly output for sum.ml
.data
.globl _camlSum__data_begin
_camlSum__data_begin:
.text
.globl _camlSum__code_begin
_camlSum__code_begin:
.data
.align 3

🧮 Why Does C Print 0.300000 for 0.1 + 0.2?

This short example shows how floating-point numbers behave in C and why simple expressions like 0.1 + 0.2 don't always behave as you'd expect.


🔢 Code: test.c

#include 
(* Reverse-mode Algorithmic differentiation using effect handlers.
Adapted from https://twitter.com/tiarkrompf/status/963314799521222656.
See https://openreview.net/forum?id=SJxJtYkPG for more information. *)
module F : sig
type t
val mk : float code -> t
val (+.) : t -> t -> t
val ( *. ) : t -> t -> t
val grad : (t -> t) -> float code -> float code
(* Reverse-mode Algorithmic differentiation using effect handlers.
Adapted from https://twitter.com/tiarkrompf/status/963314799521222656.
See https://openreview.net/forum?id=SJxJtYkPG for more information. *)
module F : sig
type t
val mk : float code -> t
val (+.) : t -> t -> t
val ( *. ) : t -> t -> t
val grad : (t -> t) -> float code -> float code
(* deep_state.ml *)
open Effect
open Effect.Shallow
module type State = sig
type a
type _ Effect.t += Get : a Effect.t
type _ Effect.t += Set : a -> unit Effect.t
end
(* The Computer Language Benchmarks Game
* https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
*
* Contributed by Troestler Christophe
* Modified by Fabrice Le Fessant
* *reset*
*)
type 'a tree = Empty | Node of 'a tree * 'a * 'a tree
type tree = Leaf of int | Node of tree * tree
let gensym = ref 0
let rec build_tree n =
if n <= 0
then (incr gensym; Leaf !gensym)
else Node(build_tree (n-1), build_tree (n-1))
let test n repet =
open Printf
open EffectHandlers
open EffectHandlers.Deep
module type STATE = sig
type t
val put : t -> unit
val get : unit -> t
val run : (unit -> 'a) -> init:t -> t * 'a
end
effect E : unit
let foo () =
let r = Atomic.make 0 in
perform E;
Atomic.set r (Atomic.get r + 1);
Atomic.get r
let bar () =
let r = ref 0 in