浮动不平等是否保证一致

时间:2015-06-29 06:49:54

标签: c++ c floating-point

假设$assigned_to=$this->user_model->get_ddl();// assign to a variable then pass to data array $data['assigned_to']=$assigned_to; var_dump($data['assigned_to']); $this->load->view('view_name', $data); abc被声明为d(或double)。以下表达式是否总是正确的?

float

IEEE 754或当前的C或C ++标准是否有任何保证?任何编译器都会在编译时将其优化为真的吗?我最感兴趣的是正常值,而不是低于正常值或特殊值。

对我而言,这主要取决于减法期间的舍入误差。

2 个答案:

答案 0 :(得分:10)

如果第3个产生错误,那么取大小等于ab以及小不等cd就足够了,例如a=1e30, b=1e30, c=1e-31, d=1e-30

编辑:好的,对于第二个产生错误,通过类比第三个,应该足够小的不等ab和大等于c和{{ 1}},例如d

不知道第一个表达式的反例......

答案 1 :(得分:7)

Serge Rogatch对你的第二和第三个表达给出了反例。

如果!(a >= b && c <= d) || a-c >= b-dabc必须全部有限,则第一个d在IEEE 754算术中始终为真。减去有限数不能产生NaN。因此,反例必须满足a >= b && c <= d && a-c < b-d。但是,a >= b意味着a-c >= b-c,无论c是什么,而c <= d意味着b-c >= b-d,无论b是什么。 >=的及物性处理其余部分。

如果您放松a = c = 1.0/0.0b,{{dabcd {{1} 1}},SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.clearFocus(); View focused = searchView.getFocusedChild(); if (focused != null) { focused.clearFocus(); } 必须都是有限的。所有的反例基本上都是这种形式。