gpt4 book ai didi

c - 将 double 映射到 long 数字的函数

转载 作者:太空狗 更新时间:2023-10-29 17:10:33 26 4
gpt4 key购买 nike

也许这似乎是一个很少见的问题,但我想找到一个能够转换 double 的函数。 (c 号) 变成 long (c 号)。没有必要保留双重信息。最重要的是:

double a,b;

long c,d;

c = f(a);

d = f(b);

这一定是事实:

if (a < b) then c < d for all a,b double and for all c,d long

谢谢大家。

最佳答案

满足以下两个条件,你的需求是可行的:

  1. 编译器定义sizeof(double)sizeof(long)相同
  2. 硬件使用IEEE 754 double-precision binary floating-point format

虽然第二个条件在每个广泛使用的平台上都成立,但第一个条件却不成立。

如果您的平台确实满足这两个条件,那么您可以按如下方式实现该功能:

long f(double x)
{
if (x > 0)
return double_to_long(x);
if (x < 0)
return -double_to_long(-x);
return 0;
}

您有几种不同的方式来实现转换功能:

long double_to_long(double x)
{
long y;
memcpy(&y,&x,sizeof(x));
return y;
}

long double_to_long(double x)
{
long y;
y = *(long*)&x;
return y;
}

long double_to_long(double x)
{
union
{
double x;
long y;
}
u;
u.x = x;
return u.y;
}

请注意,不推荐使用第二个选项,因为它会破坏 strict-aliasing rule .

关于c - 将 double 映射到 long 数字的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com