hi, indeed, this seems to be the case. Thanks!
Committed revision 1396. cheers, Here's a C test case I used to test it.... --- testbla.c --- int test_bla(float angle) { //if (!(((int) angle) % 90)) { if ( !( fmodf(angle, 90.0f) ) ) { return 1; } else { return 0; } } int main() { float angle; printf("0==%d\n", test_bla(89.9f)); printf("1==%d\n", test_bla(90.0f)); printf("0==%d\n", test_bla(90.0001f)); printf("0==%d\n", test_bla(90.1f)); printf("0==%d\n", test_bla(90.9f)); printf("0==%d\n", test_bla(92.0f)); printf("1==%d\n", test_bla(180.0f)); printf("1==%d\n", test_bla(270.0f)); printf("1==%d\n", test_bla(360.0f)); return 0; } gcc testbla.c -lm && ./a.out 0==0 1==1 0==0 0==0 0==0 0==0 1==1 1==1 1==1 On Tue, Jun 10, 2008 at 6:11 PM, Marcus von Appen <[EMAIL PROTECTED]> wrote: > On, Tue Jun 10, 2008, Charlie Nolan wrote: > >> transform.c, 574..586 >> if (!(((int) angle) % 90)) >> { >> # (snip) Exact rotation for angles that are multiples of 90. >> } >> >> There's a subtle bug here, in that casting to int will eliminate the >> full-precision rotation on every range (90*x, 90*x + 1). My C-fu is a >> bit weak, but I think that can be fixed by changing the if statement >> to: >> if ( !( angle % 90.0f ) ) > > fmodf() or fmod() would be better as % is (to my knowledge) not clearly > defined for floating point types in the C standard. Besides that, I > would agree :-). > > Regards > Marcus >