1

我正在使用 C,我必须做一个练习,我必须打印long double minand的值long double max

我用作float.h标题,但是这两个宏 ( LDBL_MIN/MAX) 给了我相同的值,就好像它只是一个双精度。

我正在使用 Visual Studio 2015,如果我将鼠标悬停在LDBL MIN它上面会显示#define LDBL_MIN DBL_MIN. 这就是它打印dbl_min而不是打印的原因ldbl_min吗?

我该如何解决这个问题?

printf("Type: Long Double Value: %lf Min: %e Max: %e Memory:%lu\n", 
    val10, LDBL_MIN, LDBL_MAX, longd_size);

LDBL这是一个问题,因为我的作业需要和的两个不同值DBL

4

3 回答 3

3

C 没有指定long double必须具有比 更大的精度/范围double

即使实现将它们视为不同的类型,它们也可能具有相同的实现、范围、精度、最小值、最大值等。

关于 Visual Studio,MS Long Double有帮助。

解决此问题,请使用另一个支持long doubledouble. 也许海湾合作委员会

于 2016-10-05T17:33:08.487 回答
2

这个关于 lfoating 点类型的参考

long double- 扩展精度浮点类型。如果支持则匹配 IEEE-754 扩展浮点类型,否则匹配某些非标准扩展浮点类型,只要其精度优于double且范围至少与 一样好double否则匹配类型double。一些 x86 和 x86_64 实现使用 80 位 x87 浮点类型。

增加重点是我的。

上面引用的内容是,虽然兼容的 C 编译器必须具有该long double类型,但它的支持方式与double. Visual Studio C 编译器可能就是这种情况。

于 2016-10-05T17:32:48.187 回答
0

这些宏要么被破坏,要么 long double 只是系统上 double 的别名。要进行测试,请将 long double 设置为 DBL_MAX,乘以 2,然后从中减去 DBL_MAX。如果结果是有限的,那么在 long double 中有额外的指数空间。如果不是,并且 long double 大于 double,则额外的字节可能只是填充,或者您可以具有相同的指数空间和更高的精度。因此 LDBL_MAX 的真正价值将仅比 DBL_MAX 高出一点点。

生成最大值的最简单方法是查找二进制表示。但是,如果您想在便携式 C 中执行此操作,您可以通过重复乘法来探测它以获得大小,然后通过重复添加 2 的降幂来填充尾数,直到您用完精度。

于 2016-10-05T17:41:00.750 回答