2014-11-05 45 views
0

这个问题已经在这里找到答案:为什么C++中没有指定复杂的整数?

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

你的意思是[高斯整数](http://en.wikipedia.org/wiki/Gaussian_integer)? – 2014-11-05 20:57:14

+0

IDK肯定,但我不清楚你期望'abs(std :: complex (3,5))'做什么。在任何情况下,你都可以编写自己的类来实现你想要做的任何事情。 – 2014-11-05 21:01:02

+0

请参阅http://stackoverflow.com/questions/11108743/一个很好的解释 – uesp 2014-11-05 21:02:24

回答

-1

在数学术语中,复数的绝对值是其分量平方和的平方根。这意味着只有在非常罕见的情况下,如3 + 4i,绝对值才是整数(本例为5)。如果您希望绝对值与模板参数的类型相同,那么您就是SOL。

+0

当然,可能会有舍入误差(并且这个舍入误差通常比使用浮点类型时大),但是我没有看到这个问题。例如,如果我有'1234567 + 7654321i',那么abs()约为7753243.557。整数结果(如7753243或7753244)可能非常有用。 – Harry 2014-11-05 21:16:43

相关问题