Tak sobie sprawdzałem, czy wynik float dla liczby podzielonej przez 2.0f
będzie taki sam jak jak wynik float tej samej liczby pomnożonej przez 0.5f
.
Najpierw wykonałem test w języku C#, ale przy wypisywaniu nie mogłem uzyskać wszystkich miejsc po przecinku!
Potem pomyślałem, że C jednak jest bardziej niskopoziomowy i w nim dam radę. No i mam ;)
using System;
public class Test
{
public static void Main()
{
float a = 7.52321311545f;
Console.WriteLine(a.ToString("N30"));
Console.WriteLine((a / 2.0f).ToString("N30"));
Console.WriteLine((a * 0.5f).ToString("N30"));
}
}
Wynik C#:
7.523213000000000000000000000000
3.761606000000000000000000000000
3.761606000000000000000000000000
#include <stdio.h>
int main(void) {
float a = 7.52321311545f;
printf("%0.30f\n%0.30f\n%0.30f\n", a, a/2.0f, a * 0.5f);
return 0;
}
Wynik C:
7.523212909698486328125000000000
3.761606454849243164062500000000
3.761606454849243164062500000000
W C# jest 6 miejsc po przecinku, a w C ok. 20 miejsc po przecinku. Dlaczego C# obcina floata, chociaż każę mu tego nie robić?
kamil