Joh*_*ohn 3 c floating-point floating-point-conversion
我的代码是
void main()
{
float a = 0.7;
if (a < 0.7)
printf("c");
else
printf("c++");
}
Run Code Online (Sandbox Code Playgroud)
它打印C,这很好,a被视为双常数值,其值将0.699999小于0.7.
现在,如果我将值更改为" 0.1,0.2,0.3直到0.9" a并且if condition此时它还会打印C++,除此之外0.7 and 0.9,两者都相等或者更大.
为什么这个概念不考虑所有价值?
AnT*_*AnT 11
你在说什么"概念"?
您提到的数字都不能精确地以二进制浮点格式表示(无论精度如何).您提到的所有数字最终都会在点之后具有无限数量的二进制数字.
由于既不float也不double具有无限的精度,在float和double格式化的执行将表示这些值近似,最有可能通过一个最接近的可表示二进制浮点值.这些近似值对于float和将是不同的double.并且近似值float可能最终大于或小于近似值double.因此你观察到的结果.
例如,在我的实现中,值0.7表示为
+6.9999998807907104e-0001 - float
+6.9999999999999995e-0001 - double
Run Code Online (Sandbox Code Playgroud)
同时,价值0.1表示为
+1.0000000149011611e-0001 - float
+1.0000000000000000e-0001 - double
Run Code Online (Sandbox Code Playgroud)
如您所见,double表示float在第一个示例中大于表示,而在第二个示例中,表示则相反.(以上是十进制表示法,它们本身是四舍五入的,但它们确实有足够的精度来充分说明效果.)