【问题标题】:Limits for floating point types?浮点类型的限制?
【发布时间】:2023-03-10 23:57:02
【问题描述】:
#include <stdio.h>
#include <limits.h>

int main(void){
        printf("Type                Size      Min                 Max\n----------------------------------------------------------------------\n");
        printf("%-20s%-10d%-20ld%-20ld\n", "long", sizeof(long), LONG_MIN, LONG_MAX);
        printf("%-20s%-10d%-20lu%-20lu\n", "unsigned long", sizeof(long), 0, ULONG_MAX);
        return 0;
}

在哪里加倍?即变量 LONG_MIN 在文件 limits.h 中。哪种类型的双精度?

   int i, min, max;

    for (i = 1.0; i > 0; ++i)
    {
        max = i;
    };
    min = i;
    printf ("int: min: %d max: %d \n", min, max);

float 和 double 怎么办? min 如何计算这个变量? 对不起英语不好

【问题讨论】:

  • 你会在en.wikipedia.org/wiki/Printf#Format_placeholders找到有效的printf格式代码
  • 我想他在问在哪里可以找到DBL_MINDBL_MAX。实际上,这是一个很好的问题。
  • 即使有多次编辑 - thx Juliet & all other - 这个帖子不清楚!
  • 只是让你知道,我认为你不应该使用minmax。将它们重命名为 iminimax。这是因为#define min(a,b) = a&gt;b ? b : a 在某个地方......(不确定在哪里。)
  • @ferz 因为我们不能很好地理解它。您是否尝试过使用Google Translate? (当然,我还没有投反对票,但其他人似乎有。)

标签: c types floating-point


【解决方案1】:

我想这就是你想要的:

浮点数:%f

长浮点数(双精度):%lf

您可能还希望以指数表示法查看它:%E

对于 float 和 double 这里的 min/max 是你想要的

这是来自 float.h 的 sn-p:

#define DBL_MAX 1.7976931348623158e+308 /* max value */
#define DBL_MIN 2.2250738585072014e-308 /* min positive value */

#define FLT_MAX 3.402823466e+38F /* max value */
#define FLT_MIN 1.175494351e-38F /* min positive value */

【讨论】:

  • 他正在寻找这些类型的 MIX 和 MAX 常量
  • %f 接受 double 参数。 (但如果float 通过... 传递,它会自动升级为double。)%lf 不正确。 %Lf 可用于 long double 参数。
  • 在“float.h”标头并不总是存在的嵌入式环境中定义这些值可能是一个很好的解决方案
【解决方案2】:

在 linux 上,我有 float.h,它分别为最大浮点值和双精度值定义了 FLT_MAX 和 DBL_MAX。不过,我不确定这有多“标准”……

【讨论】:

  • 如果我们要信任Wikipedia,就足够标准了。但是要小心:DBL_MIN 的工作方式与 INT_MIN 不同。
  • 完全符合标准(ANSI C89、ISO C90 和 ISO C99)
【解决方案3】:

浮点类型的限制在float.h not limits.h 中定义

【讨论】:

    【解决方案4】:

    要计算给定数据类型的限制,您必须简单地计算(2^(sizeof(type) * 8)) - 1,即(2^number_of_bits) - 1

    然后,如果您认为此类型是有符号的,则最小值和最大值为 -2^(number_of_bits - 1)(2^(number_of_bits - 1)) - 1,或者如果它们没有符号,则 MIN 将为 0 且 MAX 为 (2^number_of_bits) - 1

    这仅适用于整数类型,因此不适用于浮点数和双精度数,然后仅适用于二进制补码整数表示。

    【讨论】:

    • 这不适用于他所要求的浮点类型(尽管有点乱码)。他已经拥有limits.h提供的整数类型的限制
    • @Clifford:事实上我说过它只适用于整数。无论如何,我错过了limiths.h。 ;)
    • 你确实这么说,我的意思是为什么?它没有回答问题;只会让简单的事情变得复杂。您的公式甚至都不正确,即使您确实记得在每种情况下都乘以 CHAR_BIT。
    • @clifford:我没注意到他包含了limits.h
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多