Zastanawiałem dlaczego jest funkcja sqrt() C/C++, jak można osiągnąć takie same pomocąRóżnica sqrt (x) i pow (x 0,5)
pow(x,0.5);
jak to sqrt(x)
różne dla pow(x,0.5)
. Czy istnieje szczególny powód funkcji sqrt?
Zastanawiałem dlaczego jest funkcja sqrt() C/C++, jak można osiągnąć takie same pomocąRóżnica sqrt (x) i pow (x 0,5)
pow(x,0.5);
jak to sqrt(x)
różne dla pow(x,0.5)
. Czy istnieje szczególny powód funkcji sqrt?
Pobiegłem test, aby sprawdzić działanie sqrt(x)
i pow(x,0.5)
1.
for(int i=0;i<100000000;i++)
pow(double(i),0.5);
2.
for(int i=0;i<100000000;i++)
sqrt(double(i));
1. Jeden trwało około 20 sekund, gdzie jako jeden 2nd trwało około 2 sekundy na moim komputerze. Więc wydajność jest o wiele lepsza. Jak już wspomniano, czytelność jest innym powodem.
Mam wyniki odwrotne ... –
Właściwie uruchomiłem test 3 razy, aby się upewnić. Nie miałem zbyt wielu wariacji. Prosze Sprawdź ponownie. – banarun
[Przetestuj] (http://ideone.com/dlwLGR). –
Oczywiście, jeśli myślisz tylko równoważności matematycznej ...
Ale jeśli chodzi o algorytmy do obliczania wyniku, sqrt
jest specyficzna dla jednej rzeczy podczas pow
jest nazwą rodzajową.
Można więc (słusznie) założyć, że można napisać szybszą funkcję dla sqrt
niż pisać ogólną funkcję pow
.
Pamiętam, że przeczytałem gdzieś, że sqrt() jest specjalnym przypadkiem, który jest gwarantowany przez specyfikację IEEE, aby być poprawnie zaokrąglone. Sprawdzę to, żeby znaleźć źródło. Powinno też być trochę szybsze, ponieważ musi poradzić sobie tylko z jednym przypadkiem.
Nawet jeśli były takie same, dobrze jest mieć wbudowany alias dla powszechnie używanej funkcji!
Edycja: Zgodnie z IEEE-754, zarówno funkcja pow() jak i sqrt() mają być zaimplementowane w taki sposób, że zaokrąglona wartość jest najbliższą reprezentacji zmiennoprzecinkowej rzeczywistej wartości. Jednak sqrt() powinien być jeszcze szybszy.
Zobacz http://stackoverflow.com/questions/22259537/ –
Nie sądzę, że istnieje ku temu szczególny powód. Ponieważ operacja pierwiastkowania jest bardzo powszechna, a 'sqrt (x)' poprawia czytelność w porównaniu z 'pow()'. – GeekFactory
dlaczego jest rower, gdy jest rower? –
Dlaczego mamy mnożenie, kiedy możesz dodać pętlę? –