Worin besteht dann konkret der Unterschied, ob ich i direkt als float definiere oder eben an der Stelle explizit caste?
Der Unterschied besteht darin, dass im Fall dass Du i als int definierst, Berechnungen, die direkt i betreffen, eben als ganzzahlige Berechnungen durchgeführt werden und erst anschließend eine Umwandlung nach float erfolgt. Im anderen Fall würdest Du die ganze Zeit mit float rechnen. Das kann sowohl Auswirkungen auf die Genauigkeit haben, als auch auf die Geschwindigkeit. Z.B. wird die Multiplikation (i * i) mit i als int ganzzahlig durchgeführt und erst anschließend nach float gewandelt. Was nun schneller ist, hängt von verschiedenen Faktoren ab, z.B. auf was für einer Maschine der Code läuft (FPU vorhanden oder nicht, etc.).