extension FloatingPoint { @inlinable mutating func round_(_ rule: FloatingPointRoundingRule) { if let zelf = self as? Float { switch rule { default: self.round(rule) } } else if let zelf = self as? Double { switch rule { case .towardZero: self = trunc(zelf) as! Self case .down: self = floor(zelf) as! Self case .up: self = ceil(zelf) as! Self case .toNearestOrAwayFromZero: self = Darwin.round(zelf) as! Self default: self.round(rule) } } }
こんなかんじに書いただけではまだ遅いですね。 速度が同じくらいになったのでやっぱり分岐が消えてなさそう?extension FloatinPoint: Roundable
はできないか……