acos(double)
x64とx32 Visual Studioで異なる結果が得られます。 x64の上x64とx32でacos(double)の結果が異なるVisual Studio
printf("%.30g\n", double(acosl(0.49990774364240564)));
printf("%.30g\n", acos(0.49990774364240564));
:1.0473040763868076
x32の上
:SSEとlinux4.4のx32のおよびx64上の1.0473040763868078
が有効:1.0473040763868078
はVSx64 acos()
が、結果として私に1.0473040763868078
を与えるようにする方法があります?
\プロジェクト\ ConsoleApplication1 \リリース> ConsoleApplication1.exe 1.04730407638680778070749965991 1.04730407638680778070749965991 C:\プロジェクト\ ConsoleApplication1 \ x64の\リリース> ConsoleApplication1.exe 1.04730407638680755866289473488 1.04730407638680755866289473488 – Artimosha
ある答えはどのようなものあなたが探している? C++標準ではこれが許されています(+ - *とsqrtは、仮数の最後のビットまで正確に丸められた結果を生成するために必要です)。では、異なるライブラリ実装のasmレベルの詳細を尋ねていますか?確定的なFP計算は非常に難しい問題であり、AFAIKは一般的にもっと複雑なライブラリ関数を避けなければなりません。それでも、異なるコンパイラと異なるアーキテクチャは、C++で非常に難しくしています。 –
@Artimosha:なぜあなたにとって問題なのですか? IEEE754は、超越関数の最も正確な結果を保証するものではありません。 4つの基本操作とsqrtに対してのみ保証されています。 – geza