假设我想要一个带有两个浮点数 (x
和y
)的函数,我想不使用它们的float
表示来比较它们,而是使用它们作为 32 位的按位表示unsigned int
。也就是说,像这样的数字-495.5
具有位表示0b11000011111001011100000000000000
或0xC3E5C000
作为float
,并且我有一个unsigned int
具有相同位表示(对应于十进制值3286614016
,我不在乎)。有没有什么简单的方法可以让我<=
只使用它们各自unsigned int
对应的信息中包含的信息来对这些浮点执行这样的操作?
这可能是一个愚蠢的问题,但我真的有一个0和0的问题.
我正在计算函数的斜率,并且根据向量(向右或向左),它是0或-0.
是否可以执行if条件并找出斜率是0还是-0?执行以下操作无效.
if ( slope == 0.0f )
std::cout << "direction vector towards right";
else if ( slope == -0.0f )
std::cout << "direction vector towards left"
Run Code Online (Sandbox Code Playgroud)
我粗略地没有提供工作源代码,因为我认为这与问题无关.对上述内容的简单答案将有所帮助.
我正在实现该printf()
功能。几乎所有东西都可以正常工作,但是当称为时,我遇到了一个问题ft_printf("%f", -0.0)
。我的程序输出0.0
而不是-0.0
。我不能使用任何库。
我检查负性的条件就是“ x <0”,这不包括我的问题。我发现了区分零和负零的有希望的解决方案。
这似乎可以解决我的问题:
double a = -0.0;
printf("%d\n", (*((long *)&a) == 0x8000000000000000));
Run Code Online (Sandbox Code Playgroud)
我希望打印该程序,1
但是在我的程序中,当它在输出的代码中执行时0
。我有一个问题理解的部分是如何*((long *)&a)
做到的:使一个数字可与十六进制对应的数字相提并论。