La precision de un numero flotante en PHP es todo, menos precisa
Si el echo del for, lo cambias a:
echo 'index'.$i.': valor - '.
number_format($cant, 40) .'<br />';
El resultado es algo como:
Código:
index0: valor - 0.0900000000000000105471187339389871340245
index1: valor - 0.0800000000000000155431223447521915659308
index2: valor - 0.0700000000000000205391259555653959978372
index3: valor - 0.0600000000000000185962356624713720520958
index4: valor - 0.0500000000000000166533453693773481063545
index5: valor - 0.0400000000000000147104550762833241606131
index6: valor - 0.0300000000000000127675647831893002148718
index7: valor - 0.0200000000000000108246744900952762691304
index8: valor - 0.0100000000000000106165076729780594178010
index9: valor - 0.0000000000000000104083408558608425664715
Pero... usando solo dos posiciones decimales:
echo 'index'.$i.': valor - '.
number_format($cant, 2) .'<br />';
Código:
index0: valor - 0.09
index1: valor - 0.08
index2: valor - 0.07
index3: valor - 0.06
index4: valor - 0.05
index5: valor - 0.04
index6: valor - 0.03
index7: valor - 0.02
index8: valor - 0.01
index9: valor - 0.00
El resultado sigue siendo el mismo, solo cambia la representacion.
Sera cuestion de hacer pruebas para saber si realmente se tienen 16 posiciones decimales de precision o menos... de acuerdo a esas pruebas, idear una forma de hacer la comparacion eludiendo el resto de digitos.