不久前我写了一个程序,它使用了一些阶乘函数.我使用long double数据类型来支持"相对"大数字.
现在,我从代码块改为Visualstudio 2010,我想知道为什么我的程序不再工作,直到我在一些研究中意识到MS已经放弃了长双数据类型.这有什么特别的原因吗?对我而言,它看起来非常像技术方面的倒退.
有没有其他选择?(我也很乐意使用boost库中的替代品).
考虑以下代码:
\n#include <iostream>\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n long double test = 0xFFFFFFFFFFFFFFFF;\n cout << "1: " << test << endl;\n unsigned long long test2 = test;\n cout << "2: " << test2 << endl;\n cout << "3: " << (unsigned long long)test << endl;\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n使用 GCC g++ (7.5.0) 编译此代码并运行会产生预期的以下输出:
\n1: 1.84467e+19\n2: 18446744073709551615\n3: 18446744073709551615\nRun Code Online (Sandbox Code Playgroud)\n但是,使用 Microsoft Visual C++ 编译器(16.8.31019.35,64 位和 32 位)对其进行编译并运行会产生以下输出:
\n1: 1.84467e+19\n2: 9223372036854775808\n3: 9223372036854775808\nRun Code Online (Sandbox Code Playgroud)\n将值转换为 an 时unsigned long …
我知道这似乎是一个太简单的问题,但我很难理解double&的含义/含义long。所有在线资源均给出官方定义。我正在寻找外行的解释。
简而言之,我的问题是: a long long、 along double和 a之间有什么区别long float?
我尝试运行快速测试(附有屏幕截图)以查看每种类型的字节大小,但无法理解它。a 的大小如何long double与 a 相同double?