void delayed_task(){
std::this_thread::sleep_for(10)
work_on_delayed_task();
}
int main()
{
while(true){
std::thread my_thread(delayed_task);
my_thread.detach();
do_main_work();
}
}
是0.5
的(负)幂,这意味着它可以由 IEEE-754二进制浮点格式完全表示。在单位精度中,它是2
。
根据我关闭优化的快速测试(0'01111110'00000000000000000000000
),结果是-O0
,然后是y = 0.5 * x
。但它是否始终由IEEE-754标准保证?
我知道,一般来说y + y == x
是n
和2
,m = 1.0 / n
的正整数幂,然后将y = m * x
加在一起{{1}时间不会产生y
。但似乎是n
是的。
我错过了什么吗?
答案 0 :(得分:6)
不,这是一个具有double
精度浮点的简单计数器示例:
double x = 4.9E-324; // minimum positive value
double y = x * 0.5; // this doesn't only look like a zero this positive zero all 0 bits
bool test = y + y == x; // false
IEEE-754下的浮点数精度有限,除以2
时我们可能会丢失信息。在大多数情况下,当数字较小时,你可以获得准确度,你可以减少指数,但如上所述,这并不总是足够的。有时你不能减少指数。
任何具有最小指数和奇数尾数的东西都不会保持相等。这样的例子是x = 5.0E-322
。