假設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位浮點運算?
假設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位浮點運算?
您可能不應該使用浮點數來取整數的平方根,特別是long double
,這種支持得不到很好的支持,並且在某些系統上可能有近似的(不準確的)sqrtl
。相反,查找整數平方根算法。
)這是比較困難的,我正在尋找diofant方程(lim。到64位整數)的求解系統,整型數sqrtl(a)* sqrtl(b)的形式是可能解的最簡單的表示形式 – amuliar
I意味着您可以直接在整數上執行平方根而不使用浮點。 –
英巴卡迪諾的C++ Builder將處理80位浮點數。使用long double類型,或者(從Delphi導入)Extnded類型。他們是一樣的。
是的,它有80位,但失敗。 a = 8642673492431640625L; 德爾福結果:8642673492431640624. Borland C++編譯器5.5:8642673492431640200 – amuliar
好吧,我只是試過:'unsigned __int64 a = 8642673492431640625L; long double ld = a; 012fprintf(「%0.1Lf \ n」,ld);'並且它會打印:'8642673492431640625.0',這對我來說似乎是正確的。那是在C++ Builder XE中。 –
你確定sqrt()對長雙打有效嗎?
至少在某些情況下,sqrt()用於雙精度型,sqrtf()用於浮點型,sqrtl()用於長雙精度型。
是的。 math.h有版本:long double sqrt(long double) – amuliar
'
@amuliar:它被稱爲「sqrtl」,而不是「sqrt」。 –
C **或** C++編譯器?選擇*一個*或明確表示你需要兩個。 – 2011-08-10 19:22:58
'long double sqrtl(long double x);' –
WTP:可以是用於win32/amd64的C或C++編譯器。對我無關緊要。 – amuliar