誤差
またやってしまったー。
public enum RoundingRule { Ceiling, // 正の無限大へ Floor, // 負の無限大へ Zero, // ゼロへ IEEE, // IEEE 準拠 } public static int Round(int src, float pow, RoundingRule rule) { float value = src * pow; switch (rule) { case RoundingRule.Ceiling: return (int) Math.Ceiling(value); case RoundingRule.Floor: return (int) Math.Floor(value); case RoundingRule.IEEE: return (int) Math.Round(value); case RoundingRule.Zero: return Round(src, pow, (src >= 0) ? RoundingRule.Floor : RoundingRule.Ceiling); } }
以上、バグってるコード。
foreach (RoundingRule rule in Enum.Getvalues(typeof(RoundingRule))) { : Assert(21 == Round(20, 1.05F, rule)); : }
とか、もろに失敗するわけで。