代码之家  ›  专栏  ›  技术社区  ›  fpiette

如何将C语言的“if(y<0x1p-1021){some code}翻译成Delphi?

  •  0
  • fpiette  · 技术社区  · 5 年前

    0x0.3p10 代表什么价值?

    这是什么意思 p

    0 回复  |  直到 15 年前
        1
  •  58
  •   Gabe Timothy Khouri    15 年前

    0x0.3p10 是在C99中引入的十六进制浮点文字的一个示例。这个 p 将基数与指数分开。

    0x0.3 位被称为有效位部分(带可选分数的整数),指数是2的幂,按2的幂进行缩放。

    该特定值计算如下: 0.3 用十六进制,或 3 * 16 -1 ( 3/16 )乘以 2 10 ( 1024 3 * 1024 / 16 或 192 .

    #include <stdio.h>
    int main (void) {
        double d = 0x0.3p10;
        printf ("%.f\n", d);
        return 0;
    }
    

    6.4.4.2 C99的所有详细信息如下:

    浮动常量有一个有效位部分,后面可能跟有一个指数部分和一个指定其类型的后缀。有效位部分的组件可以包括表示整数部分的数字序列,后跟句点(.),后跟数字

    指数部分的组成部分是一个e、e、p或p,后跟一个由可选有符号数字序列组成的指数。必须存在整数部分或分数部分;对于十进制浮动常数,必须存在周期或指数部分。

    有效位部分被解释为(十进制或十六进制)有理数;指数部分的数字序列被解释为十进制整数。对于十进制浮动常数,指数表示有效位部分的10次幂。对于十六进制浮点常量,指数表示有效位部分的2的幂。

    对于十进制浮动常量,以及当FLT_基数不是2的幂时的十六进制浮动常量,结果是最近的可表示值,或以实现定义的方式选择与最近的可表示值相邻的较大或较小的可表示值。对于十六进制浮点常量,当FLT_基数为2的幂时,结果正确四舍五入。