Changeset 600478d for libcfa/src


Ignore:
Timestamp:
Jun 17, 2023, 6:46:20 PM (12 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
b38f6da
Parents:
6527150
Message:

change ceiling function to work with negative values

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/math.hfa

    r6527150 r600478d  
    1010// Created On       : Mon Apr 18 23:37:04 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Oct  8 08:40:42 2022
    13 // Update Count     : 136
     12// Last Modified On : Sat Jun 17 18:42:45 2023
     13// Update Count     : 198
    1414//
    1515
     
    236236
    237237        return (i << 32) + (sum);
    238 }
     238} // log2_u32_32
    239239
    240240//---------------------- Trigonometric ----------------------
     
    396396        unsigned long long int ceiling_div( unsigned long long int n, unsigned long long int align ) { return (n + (align - 1)) / align; }
    397397
    398         // forall( T | { T ?+?( T, T ); T ?-?( T, T ); T ?%?( T, T ); } )
    399         // T ceiling_div( T n, T align ) { verify( is_pow2( align ) );return (n + (align - 1)) / align; }
    400 
    401         // gcc notices the div/mod pair and saves both so only one div.
    402         signed char ceiling( signed char n, signed char align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    403         unsigned char ceiling( unsigned char n, unsigned char align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    404         short int ceiling( short int n, short int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    405         unsigned short int ceiling( unsigned short int n, unsigned short int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    406         int ceiling( int n, int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    407         unsigned int ceiling( unsigned int n, unsigned int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    408         long int ceiling( long int n, long int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    409         unsigned long int ceiling( unsigned long int n, unsigned long int align ) { return floor( n + (n % align != 0 ? align - 1 : 0) , align); }
    410         long long int ceiling( long long int n, long long int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    411         unsigned long long int ceiling( unsigned long long int n, unsigned long long int align ) { return floor( n + (n % align != 0 ? align - 1 : 0), align ); }
    412 
    413         // forall( T | { void ?{}( T &, one_t ); T ?+?( T, T ); T ?-?( T, T ); T ?/?( T, T ); } )
    414         // T ceiling( T n, T align ) { return return floor( n + (n % align != 0 ? align - 1 : 0), align ); *}
     398        signed char ceiling( signed char n, char align ) {
     399                align = align < 0 ? -align : align;                             // align must be signed
     400                typeof(n) trunc = floor( n, align );
     401                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     402        }
     403        unsigned char ceiling( unsigned char n, unsigned char align ) {
     404                typeof(n) trunc = floor( n, align );
     405                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     406        }
     407        short int ceiling( short int n, short int align ) {
     408                align = align < 0 ? -align : align;                             // align must be signed
     409                typeof(n) trunc = floor( n, align );
     410                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     411        }
     412        unsigned short int ceiling( unsigned short int n, unsigned short int align ) {
     413                typeof(n) trunc = floor( n, align );
     414                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     415        }
     416        int ceiling( int n, int align ) {
     417                align = align < 0 ? -align : align;                             // align must be signed
     418                typeof(n) trunc = floor( n, align );
     419                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     420        }
     421        unsigned int ceiling( unsigned int n, unsigned int align ) {
     422                typeof(n) trunc = floor( n, align );
     423                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     424        }
     425        long int ceiling( long int n, long int align ) {
     426                align = align < 0 ? -align : align;                             // align must be signed
     427                typeof(n) trunc = floor( n, align );
     428                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     429        }
     430        unsigned long int ceiling( unsigned long int n, unsigned long int align ) {
     431                typeof(n) trunc = floor( n, align );
     432                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     433        }
     434        long long int ceiling( long long int n, signed long long int align ) {
     435                align = align < 0 ? -align : align;                             // align must be signed
     436                typeof(n) trunc = floor( n, align );
     437                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     438        }
     439        unsigned long long int ceiling( unsigned long long int n, unsigned long long int align ) {
     440                typeof(n) trunc = floor( n, align );
     441                return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     442        }
    415443
    416444        float floor( float x ) { return floorf( x ); }
Note: See TracChangeset for help on using the changeset viewer.