核心问题是我需要记录一系列双打,每个双打都有不同数量的有效数字.数字的变化有很大的数字.一些有0(例如5257),有些有2(例如1308.75),有些一直有7(例如124.1171875).基本上是小数点后0到7位有效数字之间的所有内容.
标准Double.toString()适用于所有内容,但有7位有效数字.这是一直到6位数字,有效数字都打印没有任何无关紧要的数字.但是对于那些有7位有效数字的人,toString()会将最后一位数字舍入.即
5257 -> "5257"
1308.75 -> "1308.75"
124.1171875 -> "124.117188"
Run Code Online (Sandbox Code Playgroud)
当然我尝试使用DecimalFormat("#.#######"),这解决了丢失有效数字的问题,但它为许多低精度双精度打印了无关紧要的数字.即
1308.75 -> "1308.7499998"
Run Code Online (Sandbox Code Playgroud)
这也是不可接受的,因为它浪费了大量的空间(通常每天记录> 2 GB的数据)和2)它使用日志弄乱了应用程序.
在识别有效数字时,与toString()相比,DecimalFormat似乎很糟糕,无论如何要修复它?我只想使用toString()样式处理有效数字,并将最大位数从6扩展到7.
有任何想法吗?谢谢
在 Linux/GNU/C 环境中,正在运行的线程是否可以看到它是否已进入睡眠状态。例如说你有一个像
void foo() {
startClock();
bar();
endClock();
}
Run Code Online (Sandbox Code Playgroud)
但是您只关心代码本身的运行时间。即您不关心与运行期间挂起的线程相关的任何时间。理想情况下,您可以利用一些系统调用或库,例如 countThreadSwitches(),这样:
void foo() {
int lastCount = countThreadSwitches();
startClock();
bar();
endClock();
if (countThreadSwitches() != lastCount)
discardClock();
Run Code Online (Sandbox Code Playgroud)
}
能够判断线程是否在两个语句之间切换,将允许我们仅测量不受上下文切换影响的运行。
那么,是否有类似假设的 countThreadSwitches() 调用之类的东西?还是该信息对线程本身不透明?