这个问题已在这里得到解答:
Why does C++ mandate that complex only be instantiated for float, double, or long double?
但是,我看不出那里的答案是否有效。公认的理由是:
您无法正确实现许多std :: complex操作 整数。如,
模板 T abs(const complex& z);
复杂的 不能有T =长回报值......
但是,我没有看到任何原因。
例如,如果我有1234567 + 7654321i
,那么abs()大约是7753243.557。整数结果(例如7753243或7753244)可能非常有用。只要机制是一致的,给出哪个结果并不重要。 (与我们接受5/3 = 1的方式相同)。
有人可以提出任何关于为什么没有复杂整数的想法吗?
答案 0 :(得分:-1)
在数学术语中,复数的绝对值是其分量的平方和的平方根。这意味着只有在极少数情况下,例如3 + 4i
,绝对值才是整数(此示例为5
)。如果您希望绝对值与模板参数的类型相同,那么您就是SOL。