Annotation of researchv10dc/630/man/src/p_man/man3/muldiv.3l, revision 1.1.1.1

1.1       root        1: .ds ZZ DEVELOPMENT PACKAGE
                      2: .TH MULDIV 3L "630 MTG"
                      3: .XE "muldiv()"
                      4: .SH NAME
                      5: muldiv \- calculate (a*b)/c accurately
                      6: .SH SYNOPSIS
                      7: .ft B
                      8: #include <dmd.h>
                      9: .br
                     10: short muldiv (a, b, c)
                     11: .br
                     12: int a, b, c;
                     13: .SH DESCRIPTION
                     14: The
                     15: .I muldiv
                     16: function
                     17: is a macro that returns the 16-bit result
                     18: .IR (a*b)/c .
                     19: .I (a*b)
                     20: is calculated to 32 bits to minimize the precision lost.
                     21: The
                     22: .I muldiv
                     23: function
                     24: is convenient for calculating transformations.
                     25: .SH EXAMPLE
                     26: The following subroutine implements the transform(3R) function. It
                     27: converts a point from window coordinates to screen coordinates:
                     28: .sp
                     29: .nf
                     30: .ft CM
                     31: 
                     32: #include <dmd.h>
                     33: 
                     34: Point
                     35: transform(p)
                     36: Point p;
                     37: {
                     38:        Point Do, Dc, ret;
                     39: 
                     40:        Do = Drect.origin;
                     41:        Dc = Drect.corner;
                     42: 
                     43:        ret.x = muldiv(p.x, Dc.x-Do.x, XMAX) + Do.x;
                     44:        ret.y = muldiv(p.y, Dc.y-Do.y, YMAX) + Do.y;
                     45: 
                     46:        return(ret);
                     47: }
                     48: .ft 1
                     49: .fi
                     50: .P
                     51: The following subroutine does the opposite of the transform(3R)
                     52: function. It converts a point from screen coordinates to window 
                     53: coordinates.
                     54: .nf
                     55: .ft CM
                     56: 
                     57: #include <dmd.h>
                     58: 
                     59: Point
                     60: untransform(p)
                     61: Point p;
                     62: {
                     63:        Point Do, Dc, ret;
                     64: 
                     65:        Do = Drect.origin;
                     66:        Dc = Drect.corner;
                     67: 
                     68:        ret.x = muldiv(p.x-Do.x, XMAX, Dc.x-Do.x);
                     69:        ret.y = muldiv(p.y-Do.y, YMAX, Dc.y-Do.y);
                     70: 
                     71:        return(ret);
                     72: }
                     73: .fi
                     74: .ft R
                     75: .SH SEE ALSO
                     76: globals(3R), ptarith(3R), transform(3R/3L).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.