1

b_int64変数と仮定します。sqrt((long double)a)*sqrt((long double)b)高精度の80ビット浮動小数点で計算する必要があります。

例。(__int64)(sqrt((long double)a)*sqrt((long double)a) + 0.5) != a多くの場合、そうあるべきです。

どのwin32C/ C ++コンパイラが80ビット浮動小数点演算を管理できますか?

4

3 に答える 3

4

整数の平方根を取るために浮動小数点を使用するべきではありません。特に、long doubleサポートが不十分sqrtlで、一部のシステムでは概算(正確ではない)になる可能性があります。代わりに、整数平方根アルゴリズムを検索してください。

于 2011-08-10T20:03:11.457 に答える
2

sqrt()がlong doubleに対して有効であることを確認しますか?

少なくとも一部の環境では、sqrt()はdouble用、sqrtf()はfloat用、sqrtl()はlongdouble用です。

于 2011-08-10T19:21:27.743 に答える
1

EmbarcaderoのC++Builderは、80ビット浮動小数点を処理します。long doubleタイプ、または(Delphiからインポートされた)Extndedタイプを使用します。それらは同じです。

于 2011-08-10T19:19:35.247 に答える