c++ - 在 Windows 上使用长 double

标签 c++ windows mingw

我有一个应用程序,在用 double 进行数学计算时,由于灾难性的截断错误,我绝对必须使用 long double 数据类型。我的测试程序变得很疯狂,因为在 windows 上,long double 与 Visual Studio 只是 double 的别名,而在 linux 和 OSX 上,long double 是一个真正的 long double,标称精度为 1e-19。

关于 mingw(GCC 的 Windows 端口)是我感到困惑的地方。 Mingw 声称 LDBL_EPSILON 的精度为 1e-19,但 googleing 表明 mingw 使用的 c 运行时实际上只是不支持真正的 long double 的 microsoft c 运行时。任何人都可以在这里阐明什么吗?

编辑:问题的症结在于:在 mingw 上,如果我调用数学函数 log(long double x),这是否只是 日志(双 x)?无论哪种情况,我如何编写自己的脚本来测试此行为和/或对其进行测试?

最佳答案

代码如下

#include <iostream>
#include <cmath>

int main(void)
{
    long double y = 2.0L;

    std::cout << sizeof(y) << std::endl;

    long double q = sqrt(y);

    std::cout << q << std::endl;

    return 0;
}

产生输出 16 1.41421,到目前为止一切顺利

运行它抛出预处理器(-E 选项)并发现调用了内部但不同于 double sqrt() 函数

using ::sqrt;

inline constexpr float sqrt(float __x)
{ return __builtin_sqrtf(__x); }

inline constexpr long double sqrt(long double __x)
{ return __builtin_sqrtl(__x); }

对于 log()、sin() 也是一样的,你给它起个名字

因此,我相信 MinGW 在算术和 math.functions 中支持 long double 格式,并且这种支持是内置的,而不是基于 libquadmath

关于c++ - 在 Windows 上使用长 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208304/

相关文章:

c++ - 小于比。等于效率 C/C++

c++ - 如何从二进制文件中的给定符号获取调用者图

c++ - 设备浏览问题

c# - 在 C# Windows 应用程序中查找打开的表单

c++ - Eclipse CDT 无法在 Windows 中运行已编译的可执行文件,错误为 "terminated, exit value: <some number>"

c++ - 静态类成员的初始化。为什么要构造函数?

windows - 如何使用 Delphi 从文件扩展名中获取图标和描述?

java - Windows图形命令在java中的实现

c++ - 继续没有 msvcrt.dll

qt - 使用 MinGW 安装 Qt Creator