fn erand48(xsubi: *[3]c_ushort) callconv(.c) f64
fn erand48(xsubi: *[3]c_ushort) callconv(.c) f64 { const xi = @as(u48, @as(u16, @truncate(xsubi[0])) | (@as(u48, @as(u16, @truncate(xsubi[1])))) << 16) | (@as(u48, @as(u16, @truncate(xsubi[2]))) << 32); var separate_lcg: Lcg = .init(xi, lcg.a, lcg.c); const next_xi = separate_lcg.next(); xsubi.* = .{ @truncate(next_xi & 0xFFFF), @truncate((next_xi >> 16) & 0xFFFF), @truncate((next_xi >> 32) & 0xFFFF) }; return @as(f64, @bitCast(0x3ff0000000000000 | (@as(u64, next_xi) << 4))) - 1.0; }