Czy ktoś może wyjaśnić, co robi ta funkcja?Jak działa ta funkcja zaokrąglania matematyki?
static inline void round_to_zero(volatile float *f)
{
*f += 1e-18;
*f -= 1e-18;
}
Mam na myśli oprócz dodawania 1e-18 i odejmowania go ponownie, rozumiem to. Ale nie rozumiem, jaki wpływ będzie miał na pływak przekazany do niego. Powodem, dla którego próbuję to zrozumieć, jest to, że używam podwójnych w jakimś kodzie, który używa tej funkcji (którą przekonwertowałem z float). Jego kod dźwiękowy, a powyższa funkcja pochodzi z tej biblioteki:
https://github.com/swh/lv2/blob/master/include/ladspa-util.h
Zastanawiam się, czy to będzie działać na podwójne jak jest lub musi być modyfikowany za dodatkową precyzję podwójne ma. Podejrzewam, że to odrzuca ostatnie kilka bitów danych, usuwając je z pływaka, jeśli tam są, chociaż nie do końca rozumiem, jak. Ale wyobrażam sobie, że jeśli tak właśnie jest, będę musiał zmienić wykładnik tak, aby odpowiadał podwójnemu.
TIA, Pete
Wygląda na to, że jest to mocno zoptymalizowany kod, który opiera się na obsłudze liczb denormalnych IEEE754 z przewidywanym typem danych obsługiwanych przez kod (http://en.wikipedia.org/wiki/Denormal_number). Poza tym nie mogę tego zrozumieć. – caskey
@ Dozwolone 'denormalne liczby' float' są mniejsze. – ouah