2014-11-05 46 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

相關問題