странное поведение for() и in_array() в php

Или лыжи не едут или я идиот

<?php

for($i=0.04;$i<=0.06;$i+=0.01){$a[]=$i;}

var_dump($a);
var_dump(in_array("0.06",$a));


for($i=0.04;$i<0.07;$i+=0.01){$b[]=$i;}

var_dump($b);
var_dump(in_array("0.06",$b));

Результат

Успешно #stdin #stdout 0.02s 24456KB
array(2) {
  [0]=>
  float(0.04)
  [1]=>
  float(0.05)
}
bool(false)
array(3) {
  [0]=>
  float(0.04)
  [1]=>
  float(0.05)
  [2]=>
  float(0.06)
}
bool(false)

https://ideone.com/Mc06iZ

На сервере php 5.6, эффект тот-же.

UPD:

<?php

for($i=0.04;$i<=0.07;$i+=0.01){$a[]=$i;}

var_dump($a);
var_dump(in_array("0.06",$a));


for($i=0.04;$i<=0.07;$i+=0.01){$b[]=$i;}

var_dump($b);
var_dump(in_array("0.07",$b));

Результат

Успешно #stdin #stdout 0.02s 24108KB
array(4) {
  [0]=>
  float(0.04)
  [1]=>
  float(0.05)
  [2]=>
  float(0.06)
  [3]=>
  float(0.07)
}
bool(false)
array(4) {
  [0]=>
  float(0.04)
  [1]=>
  float(0.05)
  [2]=>
  float(0.06)
  [3]=>
  float(0.07)
}
bool(true)

Ответы (1 шт):

Автор решения: oee

Видимо проблема в точности представления float https://www.php.net/manual/ru/language.types.float.php

Но это было очень неожиданно.

Комментарии приветствуются, может есть еще объяснения?

→ Ссылка