Desbordamiento de pila a pesar de la posición de llamada de cola, pero solo en 64 bits

Originado desdeesta pregunta, Tengo este pequeño código F # (github) para generar valores aleatorios de acuerdo con una distribución normal:

// val nextSingle : (unit -> float32)
let nextSingle =
    let r = System.Random()
    r.NextDouble >> float32

// val gauss : (float32 -> float32 -> seq<float32>)
let gauss mean stdDev =
    let rec gauss ready = seq {
        match ready with
        | Some spare ->
            yield spare * stdDev + mean
            yield! gauss None
        | _ ->
            let rec loop () =
                let u = nextSingle() * 2.f - 1.f
                let v = nextSingle() * 2.f - 1.f
                let s = pown u 2 + pown v 2
                if s >= 1.f || s = 0.f then loop() else
                u, v, s
            let u, v, s = loop()
            let mul = (*)(sqrt(-2.f * log s / s))
            yield mul u * stdDev + mean
            yield! mul v |> Some |> gauss
    }
    gauss None

Para mí, parece que esto solo debería llamarse a sí mismo en la posición de llamada de cola, ergo nunca causa unStackOverflowException cuando TCO está habilitado. Perohace cuando corres64 bits. Esono cuando corres32 bits (es decir, la casilla de verificación "Preferir 32 bits" en la configuración del proyecto).

Estoy usando .NET Framework 4.5.2 y F # 4.4.0.0.

¿Alguien puede explicar qué está causando el problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta