2011-08-10 59 views
1

假設a,b_int64變量。 需要計算高精度80位浮點數sqrt((long double)a)*sqrt((long double)b)C/C++中的80位浮點運算

例子。在很多情況下應該是(__int64)(sqrt((long double)a)*sqrt((long double)a) + 0.5) != a

哪個win32 C/C++編譯器可以管理80位浮點運算?

+1

C **或** C++編譯器?選擇*一個*或明確表示你需要兩個。 – 2011-08-10 19:22:58

+1

'long double sqrtl(long double x);' –

+0

WTP:可以是用於win32/amd64的C或C++編譯器。對我無關緊要。 – amuliar

回答

2

您可能不應該使用浮點數來取整數的平方根,特別是long double,這種支持得不到很好的支持,並且在某些系統上可能有近似的(不準確的)sqrtl。相反,查找整數平方根算法。

+0

)這是比較困難的,我正在尋找diofant方程(lim。到64位整數)的求解系統,整型數sqrtl(a)* sqrtl(b)的形式是可能解的最簡單的表示形式 – amuliar

+0

I意味着您可以直接在整數上執行平方根而不使用浮點。 –

1

英巴卡迪諾的C++ Builder將處理80位浮點數。使用long double類型,或者(從Delphi導入)Extnded類型。他們是一樣的。

+0

是的,它有80位,但失敗。 a = 8642673492431640625L; 德爾福結果:8642673492431640624. Borland C++編譯器5.5:8642673492431640200 – amuliar

+0

好吧,我只是試過:'unsigned __int64 a = 8642673492431640625L; long double ld = a; 012fprintf(「%0.1Lf \ n」,ld);'並且它會打印:'8642673492431640625.0',這對我來說似乎是正確的。那是在C++ Builder XE中。 –

2

你確定sqrt()對長雙打有效嗎?

至少在某些情況下,sqrt()用於雙精度型,sqrtf()用於浮點型,sqrtl()用於長雙精度型。

+0

是的。 math.h有版本:long double sqrt(long double) – amuliar

+1

''中聲明的'sqrt()'函數肯定是雙精度的,而不是長雙精度的; 'sqrtl()'用於長時間雙打。但是''中定義了一個「type-generic macro」sqrt()'(如果你的編譯器支持它,這是一個相對較新的特性)。 –

+0

@amuliar:它被稱爲「sqrtl」,而不是「sqrt」。 –