W poprzednim semestrze musieliśmy opracować raytracera na kurs w szkole. Szkoła była skończona, próbowałem trochę z nią pogodzić.Pływak Java raytrace vs double
Chciałem zobaczyć, co się zmieni, jeśli zmienię wszystkie obliczenia zmiennoprzecinkowe z podwójnego na zmiennoprzecinkowe (wszystkie obliczenia są wykonywane z podwójnymi). Zmieniłem więc każdą zmienną, by wpisać float, i po prostu wyrzuciłem każdy podwójny wynik z metod matematycznych. Testowanie mojego raytracera na kilku scenach wykazało całkiem przyzwoity wzrost wydajności.
Wyszukiwanie w Internecie Znalazłem różne powody, dla których float może być szybszy, ale także niektóre twierdzą, że podwójne może być równie szybkie lub nawet szybsze w środowisku 64-bitowym. Chodzi o to, że pracuję w środowisku 64-bitowym i JVM. Jaki byłby powód tej zwiększonej wydajności?
Teraz czytam książkę PBRT i planuję przepisać raytracera od nowa. Czy wybranie pływającego dla wszystkich obliczeń zmiennoprzecinkowych stwarza jakiekolwiek problemy? Nie zauważyłem żadnego podczas moich testów, ale być może w przypadku niektórych scen mniejsza precyzja mogłaby (testowanie skrzyżowań wydaje się być sytuacją, w której może to stanowić potencjalny problem)? A może kompromis, jak np. Użycie podwójnego testu krytycznego i float dla mniej krytycznych obliczeń? Musiałbym użyć innej biblioteki Math, aby pozbyć się rzucania, czy będę pływał po wodzie.
Wierzę, że 'podwójne d = 1d' to dwie instrukcje, podczas gdy' float f = 1f' jest jedna. Nawet na 64-bitowych komputerach. Bałagan z 64-bitową maszyną JVM. – jn1kk
"Używam środowiska 64-bitowego" 64-bitowy system operacyjny nie jest traktowany jako środowisko 64-bitowe. Twój kompilator i inne narzędzia (takie jak JVM, jeśli robisz Javę) również muszą być 64-bitowe. –
możliwy duplikat [Czy liczba woltów jest mniejsza niż dwukrotnie? Czy program 64-bitowy działa szybciej niż program 32-bitowy?] (Http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -bit-program) –