通用数字文字

时间:2016-02-24 22:14:59

标签: d

bool isUnit(Vec)(in Vec v, float tolerance = kindaSmallNumber){
    import std.math: abs;
    import std.conv: to;
    auto length = v.lengthSquared;
    return abs(to!(typeof(length))(1) - length) < tolerance;
}

这里我只想计算1 - length,但长度可以是double或float类型。我不想在运行时将1从整数转换为floatdouble

我是否必须to!(typeof(length))(1) - length或{I} 1 - length 1function distance(s, t) { if (s === t) { return 0; } var n = s.length, m = t.length; if (n === 0 || m === 0) { return n + m; } var x = 0, y, py, a, b, c, d, e, f, k; var p = new Array(n); for (y = 0; y < n;) { p[y] = ++y; } for (; (x + 3) < m; x += 4) { var tx0 = t.charCodeAt(x); var tx1 = t.charCodeAt(x + 1); var tx2 = t.charCodeAt(x + 2); var tx3 = t.charCodeAt(x + 3); a = x; b = x + 1; c = x + 2; d = x + 3; e = x + 4; for (y = 0; y < n; y++) { k = s.charCodeAt(y); py = p[y]; if (py < a || b < a) { a = (py > b ? b + 1 : py + 1); } else { if (tx0 !== k) { a++; } } if (a < b || c < b) { b = (a > c ? c + 1 : a + 1); } else { if (tx1 !== k) { b++; } } if (b < c || d < c) { c = (b > d ? d + 1 : b + 1); } else { if (tx2 !== k) { c++; } } if (c < d || e < d) { d = (c > e ? e + 1 : c + 1); } else { if (tx3 !== k) { d++; } } p[y] = e = d; d = c; c = b; b = a; a = py; } } for (; x < m;) { tx0 = t.charCodeAt(x); a = x; b = ++x; for (y = 0; y < n; y++) { py = p[y]; if (py < a || b < a) { b = (py > b ? b + 1 : py + 1); } else { if (tx0 !== s.charCodeAt(y)) { b = a + 1; } else { b = a; } } p[y] = b; a = py; } f = b; } return f; } 的长度类型相同?

1 个答案:

答案 0 :(得分:5)

1的类型与那里无关。它将自动转换为适当的长度算术类型。

来自http://dlang.org/spec/expression.html#AddExpression

  

如果任一操作数是浮点类型,则另一个操作数被隐式转换为浮点数,并通过通常的算术转换将它们带到一个公共类型。

所以它完全是由编译器自动完成的(当然,编译时知道btw,所以它不会在这里做任何运行时的东西)。

但是对于想要了解特定问题答案的其他人,您可以使用1.0等类型文字或类型构造函数,例如typeof(length)(1)