void Scm_PutBinaryF64(ScmUVector *uv, int off, ScmObj val, ScmSymbol *e) { swap_f64_t v; CHECK_ENDIAN(e); v.val = Scm_GetDouble(val); SWAP_D(e, v); inject(uv, v.buf, off, 8); }
ScmObj Scm_GetBinaryF64(ScmUVector *uv, int off, ScmSymbol *endian) { swap_f64_t v; CHECK_ENDIAN(endian); extract(uv, v.buf, off, 8); SWAP_D(endian, v); return Scm_MakeFlonum(v.val); }
ScmObj Scm_ReadBinaryF64(ScmPort *iport, ScmSymbol *endian) { swap_f64_t v; CHECK_ENDIAN(endian); if (getbytes(v.buf, 8, iport) == EOF) return SCM_EOF; SWAP_D(endian, v); return Scm_MakeFlonum(v.val); }
void Scm_WriteBinaryF64(ScmObj sval, ScmPort *oport, ScmSymbol *endian) { swap_f64_t v; ENSURE_OPORT(oport); CHECK_ENDIAN(endian); v.val = Scm_GetDouble(sval); SWAP_D(endian, v); Scm_Putz(v.buf, 8, oport); }
/* select fixed ambiguities --------------------------------------------------*/ static int sel_amb(int *sat1, int *sat2, double *N, double *var, int n) { int i,j,flgs[MAXSAT]= {0},max_flg=0; /* sort by variance */ for (i=0; i<n; i++) for (j=1; j<n-i; j++) { if (var[j]>=var[j-1]) continue; SWAP_I(sat1[j],sat1[j-1]); SWAP_I(sat2[j],sat2[j-1]); SWAP_D(N[j],N[j-1]); SWAP_D(var[j],var[j-1]); } /* select linearly independent satellite pair */ for (i=j=0; i<n; i++) { if (!is_depend(sat1[i],sat2[i],flgs,&max_flg)) continue; sat1[j]=sat1[i]; sat2[j]=sat2[i]; N[j]=N[i]; var[j++]=var[i]; } return j; }