为什么浮点数打印为负零?

时间:2015-01-28 22:02:57

标签: objective-c cocoa-touch math matrix transform

问题

有时零值的浮点数打印为负零,即使不等式检查显示该数字为非负数。

的应用

我正试图以人类可读的格式注销UIView的转换矩阵。数字应该安排如下:

enter image description here

- (void) describe
{
    NSLog(
        @"|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 1.00|",
        self.transform.a < 0 ? @"" : @" ",
        self.transform.a,
        self.transform.b < 0 ? @"" : @" ",
        self.transform.b,
        self.transform.c < 0 ? @"" : @" ",
        self.transform.c,
        self.transform.d < 0 ? @"" : @" ",
        self.transform.d,
        self.transform.tx < 0 ? @"" : @" ",
        self.transform.tx,
        self.transform.ty < 0 ? @"" : @" ",
        self.transform.ty
    );
}

我在非负数字前面放置空格以匹配负数的宽度。在某些情况下,数字排成一行:

| 0.00 -1.00 0.00|
| 1.00  0.00 0.00|
| 0.00  0.00 1.00|

对视图进行几次旋转后,数字不再对齐:

| -0.00 -1.00 0.00|
| 1.00  -0.00 0.00|
| 0.00  0.00 1.00|

在上述情况下,NSLog self将变换打印为:

transform = [-0, -1, 1, -0, 0, 0];

问题是零值被记录为负零,但被检测为非负值。如果我能理解这个神秘的负零甚至可以存在,那么我可以解决我的格式化问题。

1 个答案:

答案 0 :(得分:0)

[回复评论]

浮点值有mantisa,指数和符号分开

  • 所以他们能够存储+0和-0这是相同的......
  • 该标志是从上次操作中剩余的,具有这样的价值......