private static double computeLimits(double t, double[] floors, double[] ceilings)
{
double floor = Math.Floor(t);
double ceiling = Math.Ceiling(t);
double z = t - floor;
double w = ceiling - t;
if (z > 0.5)
{
for (int i = 1; i < floors.Length; i += 2)
floors[i] = i / 2 - 1 - floor;
for (int i = 2; i < floors.Length; i += 2)
floors[i] = i / 2 - 2 - floor;
for (int i = 1; i < ceilings.Length; i += 2)
ceilings[i] = i / 2 + 1 + floor;
for (int i = 2; i < ceilings.Length; i += 2)
ceilings[i] = i / 2 + floor;
}
else if (z > 0.0)
{
ceilings[1] = 1 + floor;
for (int i = 1; i < floors.Length; i++)
floors[i] = i / 2 - 1 - floor;
for (int i = 2; i < ceilings.Length; i++)
ceilings[i] = i / 2 + floor;
}
else // if (z == 0)
{
for (int i = 1; i < floors.Length; i += 2)
floors[i] = i / 2 - floor;
for (int i = 2; i < floors.Length; i += 2)
floors[i] = i / 2 - 1 - floor;
for (int i = 1; i < ceilings.Length; i += 2)
ceilings[i] = i / 2 + floor;
for (int i = 2; i < ceilings.Length; i += 2)
ceilings[i] = i / 2 - 1 + floor;
}
if (w < z) z = w;
return z;
}