Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译Windows C++;VS2010中长双工的应用_C++_Windows_Visual Studio 2010_Precision_Long Double - Fatal编程技术网

C++ 编译Windows C++;VS2010中长双工的应用

C++ 编译Windows C++;VS2010中长双工的应用,c++,windows,visual-studio-2010,precision,long-double,C++,Windows,Visual Studio 2010,Precision,Long Double,在工作中,我们有MSVS2010 Ultimate,我正在编写一个程序,使用实数进行详尽的模拟。我得到了非平凡的舍入误差,并且我已经采取了合理的步骤来确保我的算法在数值上尽可能稳定 我想切换到128位四精度浮点数(长双精度,对吗?),看看它有多大的不同 我已将所有相关的double实例替换为longdouble,重新编译并再次运行虚拟模拟,但结果与以前完全相同 根据C/C++中的“我的项目”属性页,这些是我的(调试)编译器选项: /ZI/nologo/W3/WX-/Od/Oy-/D“_MBCS”

在工作中,我们有MSVS2010 Ultimate,我正在编写一个程序,使用实数进行详尽的模拟。我得到了非平凡的舍入误差,并且我已经采取了合理的步骤来确保我的算法在数值上尽可能稳定

我想切换到128位四精度浮点数(长双精度,对吗?),看看它有多大的不同

我已将所有相关的
double
实例替换为
longdouble
,重新编译并再次运行虚拟模拟,但结果与以前完全相同

根据C/C++中的“我的项目”属性页,这些是我的(调试)编译器选项:

/ZI/nologo/W3/WX-/Od/Oy-/D“_MBCS”/Gm/EHsc/RTC1/GS/fp:precise/Zc:wchar\u t/Zc:forScope/fp“Debug\FFTU.pch”/Fa“Debug\”/Fo“Debug\”/Fd“Debug\vc100.pdb”/Gd/analyze-/errorReport:queue


我的开发CPU是Core2Duo T7300,但目标机器将是i7。两种安装都是64位Windows 7。

您可以切换到非Microsoft编译器,如
gcc
、Borland或Intel。所有这些都识别为“代码>long double /CODE>80位扩展精度”,8087的.VisualC++的原生内部格式<

,VisualC++, long double < /C> >与双相同,因此,结果是我看到的结果。在Windows中,有没有其他方法可以在VS2010中获得128位的四倍精度?(不使用任何第三方库,如GMP.Windows.h就可以了)。您认为您的CPU提供128位浮点吗?x87只支持32、64和80位(我不是这方面的专家,但我认为SSE也不提供任何uberwise浮点功能)。上面的回答并不公平。即使没有8087协处理器,C++库也能使用浮点。因此,考虑到这一点,另一个解决方案是找到一个数学库,允许您想要的精度。这会慢得多,但至少会起作用。您的问题很可能通过更大的浮动来解决。在gcc-4.3.4上
sizeof(long double)
是12。VC++
double
使用80位寄存器保存浮点计算的中间结果,但在内存中以64位存储。