繁体   English   中英

想要长原始的NaN值

[英]long primitive NaN value wanted

场景:

1)我有一个可以设置或不设置的长状态变量。

2)此long变量具有从Long.MIN_VALUE到Long.MAX_VALUE的有效值,包括零

3)这是性能敏感的代码,所以我不想使用Long包装器类型

我怎么写这么长的'套装'检查? 我是否真的必须添加第二个布尔值来测试long是否有效? 这似乎很草率。 我知道我可以在这里使用Long包装器,但这似乎是创建如此多的对象并检查null的性能浪费。

伪代码(这是我想要的):

class foo {

long someLong = NaN; //NaN = hypothetical not a number like Double

public reset() {
  someLong = NaN;
}

public doSomethingElse() {
   if(someLong !=NaN) {
     //report
     reset();
   }
}

public doSomeStuff() {
  if(someLong == NaN) {
   someLong = //something
  }
}

}

}

您必须为NaN留出一个特殊值。 如果你真的使用了所有可能的值,那就没有了。

你确定Long对象有很大的性能问题吗?

如果是这样,可能有一个额外的布尔值来表示是否设置了值?

使用Long而不是long,并使用null作为NaN值。

很久没有NaN了。 如果您确定性能至关重要(我将测试使用Long的速度惩罚),那么您将需要使用另一个标志值。

我使用了Long.MIN_VALUE,因为它具有奇怪的属性

Long.MIN_VALUE == -Long.MIN_VALUE

它也不太可能自然发生。

使用它的问题是,它可以使代码更复杂。 出于这个原因,我使用了double而不是+/- 2 ^ 53的整数值可以无错误地表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM