o: ActiveSupport::Cache::Entry :@compressedF: @value"θΩ"αΩ
main.lst
1
CCS PCM C Compiler, Version 4.106, 47914               15-V-13 18:53
1
CCS PCM C Compiler, Version 4.106, 47914               15-V-13 20:34
2 2

  
3 3
               Filename: Z:\home\kaklik\svnMLAB\Modules\Sensors\MAG01A\SW\PIC16F887\main.lst
4 4

  
5
               ROM used: 821 words (10%)
5
               ROM used: 775 words (9%)
6 6
                         Largest free fragment is 2048
7
               RAM used: 18 (5%) at main() level
8
                         27 (7%) worst case
7
               RAM used: 28 (8%) at main() level
8
                         38 (10%) worst case
9 9
               Stack:    2 locations
10 10

  
11 11
*
12 12
0000:  MOVLW  02
13 13
0001:  MOVWF  0A
14
0002:  GOTO   250
14
0002:  GOTO   24F
15 15
0003:  NOP
16 16
.................... #include "main.h" 
17 17
.................... #include <16F887.h> 
......
48 48
0026:  MOVWF  07
49 49
0027:  NOP
50 50
0028:  BCF    03.5
51
0029:  RLF    32,F
51
0029:  RLF    3D,F
52 52
002A:  BCF    07.4
53 53
002B:  BTFSS  03.0
54 54
002C:  GOTO   033
......
113 113
0067:  BCF    03.5
114 114
0068:  RETURN
115 115
*
116
010C:  MOVLW  08
117
010D:  MOVWF  33
118
010E:  MOVF   77,W
119
010F:  MOVWF  34
120
0110:  BSF    20.4
121
0111:  MOVF   20,W
122
0112:  BSF    03.5
123
0113:  MOVWF  07
124
0114:  NOP
125
0115:  BCF    03.5
126
0116:  BSF    20.3
127
0117:  MOVF   20,W
128
0118:  BSF    03.5
129
0119:  MOVWF  07
130
011A:  BCF    03.5
131
011B:  BTFSS  07.3
132
011C:  GOTO   11B
133
011D:  BTFSC  07.4
134
011E:  BSF    03.0
135
011F:  BTFSS  07.4
136
0120:  BCF    03.0
137
0121:  RLF    78,F
138
0122:  NOP
139
0123:  BCF    20.3
140
0124:  MOVF   20,W
141
0125:  BSF    03.5
142
0126:  MOVWF  07
143
0127:  BCF    03.5
144
0128:  BCF    07.3
145
0129:  DECFSZ 33,F
146
012A:  GOTO   110
147
012B:  BSF    20.4
148
012C:  MOVF   20,W
149
012D:  BSF    03.5
150
012E:  MOVWF  07
151
012F:  NOP
152
0130:  BCF    03.5
153
0131:  BCF    07.4
154
0132:  MOVF   34,W
155
0133:  BTFSC  03.2
156
0134:  GOTO   13A
157
0135:  BCF    20.4
158
0136:  MOVF   20,W
159
0137:  BSF    03.5
160
0138:  MOVWF  07
161
0139:  BCF    03.5
162
013A:  NOP
163
013B:  BSF    20.3
164
013C:  MOVF   20,W
165
013D:  BSF    03.5
166
013E:  MOVWF  07
167
013F:  BCF    03.5
168
0140:  BTFSS  07.3
169
0141:  GOTO   140
170
0142:  NOP
171
0143:  BCF    07.3
172
0144:  BCF    20.3
173
0145:  MOVF   20,W
174
0146:  BSF    03.5
175
0147:  MOVWF  07
176
0148:  NOP
177
0149:  BCF    03.5
178
014A:  BCF    07.4
179
014B:  BCF    20.4
180
014C:  MOVF   20,W
181
014D:  BSF    03.5
182
014E:  MOVWF  07
183
014F:  BCF    03.5
184
0150:  RETURN
185
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD 
116
010B:  MOVLW  08
117
010C:  MOVWF  3E
118
010D:  MOVF   77,W
119
010E:  MOVWF  3F
120
010F:  BSF    20.4
121
0110:  MOVF   20,W
122
0111:  BSF    03.5
123
0112:  MOVWF  07
124
0113:  NOP
125
0114:  BCF    03.5
126
0115:  BSF    20.3
127
0116:  MOVF   20,W
128
0117:  BSF    03.5
129
0118:  MOVWF  07
130
0119:  BCF    03.5
131
011A:  BTFSS  07.3
132
011B:  GOTO   11A
133
011C:  BTFSC  07.4
134
011D:  BSF    03.0
135
011E:  BTFSS  07.4
136
011F:  BCF    03.0
137
0120:  RLF    78,F
138
0121:  NOP
139
0122:  BCF    20.3
140
0123:  MOVF   20,W
141
0124:  BSF    03.5
142
0125:  MOVWF  07
143
0126:  BCF    03.5
144
0127:  BCF    07.3
145
0128:  DECFSZ 3E,F
146
0129:  GOTO   10F
147
012A:  BSF    20.4
148
012B:  MOVF   20,W
149
012C:  BSF    03.5
150
012D:  MOVWF  07
151
012E:  NOP
152
012F:  BCF    03.5
153
0130:  BCF    07.4
154
0131:  MOVF   3F,W
155
0132:  BTFSC  03.2
156
0133:  GOTO   139
157
0134:  BCF    20.4
158
0135:  MOVF   20,W
159
0136:  BSF    03.5
160
0137:  MOVWF  07
161
0138:  BCF    03.5
162
0139:  NOP
163
013A:  BSF    20.3
164
013B:  MOVF   20,W
165
013C:  BSF    03.5
166
013D:  MOVWF  07
167
013E:  BCF    03.5
168
013F:  BTFSS  07.3
169
0140:  GOTO   13F
170
0141:  NOP
171
0142:  BCF    07.3
172
0143:  BCF    20.3
173
0144:  MOVF   20,W
174
0145:  BSF    03.5
175
0146:  MOVWF  07
176
0147:  NOP
177
0148:  BCF    03.5
178
0149:  BCF    07.4
179
014A:  BCF    20.4
180
014B:  MOVF   20,W
181
014C:  BSF    03.5
182
014D:  MOVWF  07
183
014E:  BCF    03.5
184
014F:  RETURN
185
.................... #use rs232(baud=115200,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD 
186 186
*
187 187
00A2:  BCF    20.7
188 188
00A3:  MOVF   20,W
......
195 195
00AA:  GOTO   0AB
196 196
00AB:  NOP
197 197
00AC:  BSF    78.7
198
00AD:  GOTO   0BC
198
00AD:  GOTO   0C0
199 199
00AE:  BCF    78.7
200
00AF:  RRF    35,F
201
00B0:  BTFSC  03.0
202
00B1:  BSF    07.7
203
00B2:  BTFSS  03.0
204
00B3:  BCF    07.7
205
00B4:  BSF    78.6
206
00B5:  GOTO   0BC
207
00B6:  BCF    78.6
208
00B7:  DECFSZ 78,F
209
00B8:  GOTO   0AF
210
00B9:  GOTO   0BA
211
00BA:  NOP
212
00BB:  BSF    07.7
213
00BC:  MOVLW  3F
214
00BD:  MOVWF  04
215
00BE:  DECFSZ 04,F
216
00BF:  GOTO   0BE
217
00C0:  NOP
218
00C1:  BTFSC  78.7
219
00C2:  GOTO   0AE
220
00C3:  BTFSC  78.6
221
00C4:  GOTO   0B6
222
00C5:  RETURN
200
00AF:  MOVF   40,W
201
00B0:  MOVWF  79
202
00B1:  RRF    79,F
203
00B2:  BTFSC  03.0
204
00B3:  BSF    07.7
205
00B4:  BTFSS  03.0
206
00B5:  BCF    07.7
207
00B6:  BSF    78.6
208
00B7:  GOTO   0C0
209
00B8:  BCF    78.6
210
00B9:  DECFSZ 78,F
211
00BA:  GOTO   0B1
212
00BB:  MOVF   79,W
213
00BC:  MOVWF  40
214
00BD:  GOTO   0BE
215
00BE:  NOP
216
00BF:  BSF    07.7
217
00C0:  BTFSC  78.7
218
00C1:  GOTO   0AE
219
00C2:  BTFSC  78.6
220
00C3:  GOTO   0B8
221
00C4:  RETURN
223 222
....................  
224 223
....................  
225 224
.................... #include "HMC5883L.h" 
......
284 283
.................... i2c_write(HMC5883L_WRT_ADDR); 
285 284
0081:  MOVLW  3C
286 285
0082:  BCF    03.5
287
0083:  MOVWF  32
286
0083:  MOVWF  3D
288 287
0084:  CALL   01F
289 288
.................... i2c_write(reg); 
290
0085:  MOVF   2C,W
291
0086:  MOVWF  32
289
0085:  MOVF   37,W
290
0086:  MOVWF  3D
292 291
0087:  CALL   01F
293 292
.................... i2c_write(data); 
294
0088:  MOVF   2D,W
295
0089:  MOVWF  32
293
0088:  MOVF   38,W
294
0089:  MOVWF  3D
296 295
008A:  CALL   01F
297 296
.................... i2c_stop(); 
298 297
008B:  BCF    20.4
......
348 347
.................... // from the HMC5883L x,y,z registers. 
349 348
.................... hmc5883l_result compass = {0,0,0}; 
350 349
*
351
0271:  CLRF   21
352
0272:  CLRF   22
353
0273:  CLRF   23
354
0274:  CLRF   24
355
0275:  CLRF   25
356
0276:  CLRF   26
350
0270:  CLRF   21
351
0271:  CLRF   22
352
0272:  CLRF   23
353
0273:  CLRF   24
354
0274:  CLRF   25
355
0275:  CLRF   26
357 356
....................  
358 357
.................... //------------------------------ 
359 358
.................... void hmc5883l_read_data(void) 
......
369 368
....................  
370 369
.................... i2c_start(); 
371 370
*
372
0151:  BSF    20.4
373
0152:  MOVF   20,W
374
0153:  BSF    03.5
375
0154:  MOVWF  07
376
0155:  NOP
377
0156:  BCF    03.5
378
0157:  BSF    20.3
379
0158:  MOVF   20,W
380
0159:  BSF    03.5
381
015A:  MOVWF  07
382
015B:  NOP
383
015C:  BCF    03.5
384
015D:  BCF    07.4
385
015E:  BCF    20.4
386
015F:  MOVF   20,W
387
0160:  BSF    03.5
388
0161:  MOVWF  07
389
0162:  NOP
390
0163:  BCF    03.5
391
0164:  BCF    07.3
392
0165:  BCF    20.3
393
0166:  MOVF   20,W
394
0167:  BSF    03.5
395
0168:  MOVWF  07
371
0150:  BSF    20.4
372
0151:  MOVF   20,W
373
0152:  BSF    03.5
374
0153:  MOVWF  07
375
0154:  NOP
376
0155:  BCF    03.5
377
0156:  BSF    20.3
378
0157:  MOVF   20,W
379
0158:  BSF    03.5
380
0159:  MOVWF  07
381
015A:  NOP
382
015B:  BCF    03.5
383
015C:  BCF    07.4
384
015D:  BCF    20.4
385
015E:  MOVF   20,W
386
015F:  BSF    03.5
387
0160:  MOVWF  07
388
0161:  NOP
389
0162:  BCF    03.5
390
0163:  BCF    07.3
391
0164:  BCF    20.3
392
0165:  MOVF   20,W
393
0166:  BSF    03.5
394
0167:  MOVWF  07
396 395
.................... i2c_write(HMC5883L_WRT_ADDR); 
397
0169:  MOVLW  3C
398
016A:  BCF    03.5
399
016B:  MOVWF  32
400
016C:  CALL   01F
396
0168:  MOVLW  3C
397
0169:  BCF    03.5
398
016A:  MOVWF  3D
399
016B:  CALL   01F
401 400
.................... i2c_write(HMC5883L_X_MSB_REG);  // Point to X-msb register 
402
016D:  MOVLW  03
403
016E:  MOVWF  32
404
016F:  CALL   01F
401
016C:  MOVLW  03
402
016D:  MOVWF  3D
403
016E:  CALL   01F
405 404
.................... i2c_start(); 
406
0170:  BSF    20.4
407
0171:  MOVF   20,W
408
0172:  BSF    03.5
409
0173:  MOVWF  07
410
0174:  NOP
411
0175:  BCF    03.5
412
0176:  BSF    20.3
413
0177:  MOVF   20,W
414
0178:  BSF    03.5
415
0179:  MOVWF  07
416
017A:  NOP
417
017B:  BCF    03.5
418
017C:  BTFSS  07.3
419
017D:  GOTO   17C
420
017E:  BCF    07.4
421
017F:  BCF    20.4
422
0180:  MOVF   20,W
423
0181:  BSF    03.5
424
0182:  MOVWF  07
425
0183:  NOP
426
0184:  BCF    03.5
427
0185:  BCF    07.3
428
0186:  BCF    20.3
429
0187:  MOVF   20,W
430
0188:  BSF    03.5
431
0189:  MOVWF  07
405
016F:  BSF    20.4
406
0170:  MOVF   20,W
407
0171:  BSF    03.5
408
0172:  MOVWF  07
409
0173:  NOP
410
0174:  BCF    03.5
411
0175:  BSF    20.3
412
0176:  MOVF   20,W
413
0177:  BSF    03.5
414
0178:  MOVWF  07
415
0179:  NOP
416
017A:  BCF    03.5
417
017B:  BTFSS  07.3
418
017C:  GOTO   17B
419
017D:  BCF    07.4
420
017E:  BCF    20.4
421
017F:  MOVF   20,W
422
0180:  BSF    03.5
423
0181:  MOVWF  07
424
0182:  NOP
425
0183:  BCF    03.5
426
0184:  BCF    07.3
427
0185:  BCF    20.3
428
0186:  MOVF   20,W
429
0187:  BSF    03.5
430
0188:  MOVWF  07
432 431
.................... i2c_write(HMC5883L_READ_ADDR); 
433
018A:  MOVLW  3D
434
018B:  BCF    03.5
435
018C:  MOVWF  32
436
018D:  CALL   01F
432
0189:  MOVLW  3D
433
018A:  BCF    03.5
434
018B:  MOVWF  3D
435
018C:  CALL   01F
437 436
....................  
438 437
.................... x_msb = i2c_read(); 
439
018E:  MOVLW  01
440
018F:  MOVWF  77
441
0190:  CALL   10C
442
0191:  MOVF   78,W
443
0192:  MOVWF  2D
438
018D:  MOVLW  01
439
018E:  MOVWF  77
440
018F:  CALL   10B
441
0190:  MOVF   78,W
442
0191:  MOVWF  38
444 443
.................... x_lsb = i2c_read(); 
445
0193:  MOVLW  01
446
0194:  MOVWF  77
447
0195:  CALL   10C
448
0196:  MOVF   78,W
449
0197:  MOVWF  2C
444
0192:  MOVLW  01
445
0193:  MOVWF  77
446
0194:  CALL   10B
447
0195:  MOVF   78,W
448
0196:  MOVWF  37
450 449
....................  
451 450
.................... z_msb = i2c_read(); 
452
0198:  MOVLW  01
453
0199:  MOVWF  77
454
019A:  CALL   10C
455
019B:  MOVF   78,W
456
019C:  MOVWF  31
451
0197:  MOVLW  01
452
0198:  MOVWF  77
453
0199:  CALL   10B
454
019A:  MOVF   78,W
455
019B:  MOVWF  3C
457 456
.................... z_lsb = i2c_read();    
458
019D:  MOVLW  01
459
019E:  MOVWF  77
460
019F:  CALL   10C
461
01A0:  MOVF   78,W
462
01A1:  MOVWF  30
457
019C:  MOVLW  01
458
019D:  MOVWF  77
459
019E:  CALL   10B
460
019F:  MOVF   78,W
461
01A0:  MOVWF  3B
463 462
....................  
464 463
.................... y_msb = i2c_read(); 
465
01A2:  MOVLW  01
466
01A3:  MOVWF  77
467
01A4:  CALL   10C
468
01A5:  MOVF   78,W
469
01A6:  MOVWF  2F
464
01A1:  MOVLW  01
465
01A2:  MOVWF  77
466
01A3:  CALL   10B
467
01A4:  MOVF   78,W
468
01A5:  MOVWF  3A
470 469
.................... y_lsb = i2c_read(0); // do a NACK on last read 
471
01A7:  CLRF   77
472
01A8:  CALL   10C
473
01A9:  MOVF   78,W
474
01AA:  MOVWF  2E
470
01A6:  CLRF   77
471
01A7:  CALL   10B
472
01A8:  MOVF   78,W
473
01A9:  MOVWF  39
475 474
....................  
476 475
.................... i2c_stop(); 
477
01AB:  BCF    20.4
478
01AC:  MOVF   20,W
479
01AD:  BSF    03.5
480
01AE:  MOVWF  07
481
01AF:  NOP
482
01B0:  BCF    03.5
483
01B1:  BSF    20.3
484
01B2:  MOVF   20,W
485
01B3:  BSF    03.5
486
01B4:  MOVWF  07
487
01B5:  BCF    03.5
488
01B6:  BTFSS  07.3
489
01B7:  GOTO   1B6
490
01B8:  NOP
491
01B9:  GOTO   1BA
492
01BA:  NOP
493
01BB:  BSF    20.4
494
01BC:  MOVF   20,W
495
01BD:  BSF    03.5
496
01BE:  MOVWF  07
497
01BF:  NOP
476
01AA:  BCF    20.4
477
01AB:  MOVF   20,W
478
01AC:  BSF    03.5
479
01AD:  MOVWF  07
480
01AE:  NOP
481
01AF:  BCF    03.5
482
01B0:  BSF    20.3
483
01B1:  MOVF   20,W
484
01B2:  BSF    03.5
485
01B3:  MOVWF  07
486
01B4:  BCF    03.5
487
01B5:  BTFSS  07.3
488
01B6:  GOTO   1B5
489
01B7:  NOP
490
01B8:  GOTO   1B9
491
01B9:  NOP
492
01BA:  BSF    20.4
493
01BB:  MOVF   20,W
494
01BC:  BSF    03.5
495
01BD:  MOVWF  07
496
01BE:  NOP
498 497
....................   
499 498
.................... // Combine high and low bytes into 16-bit values. 
500 499
.................... compass.x = make16(x_msb, x_lsb); 
501
01C0:  BCF    03.5
502
01C1:  MOVF   2D,W
503
01C2:  MOVWF  22
504
01C3:  MOVF   2C,W
505
01C4:  MOVWF  21
500
01BF:  BCF    03.5
501
01C0:  MOVF   38,W
502
01C1:  MOVWF  22
503
01C2:  MOVF   37,W
504
01C3:  MOVWF  21
506 505
.................... compass.y = make16(y_msb, y_lsb); 
507
01C5:  MOVF   2F,W
508
01C6:  MOVWF  24
509
01C7:  MOVF   2E,W
510
01C8:  MOVWF  23
506
01C4:  MOVF   3A,W
507
01C5:  MOVWF  24
508
01C6:  MOVF   39,W
509
01C7:  MOVWF  23
511 510
.................... compass.z = make16(z_msb, z_lsb); 
512
01C9:  MOVF   31,W
513
01CA:  MOVWF  26
514
01CB:  MOVF   30,W
515
01CC:  MOVWF  25
511
01C8:  MOVF   3C,W
512
01C9:  MOVWF  26
513
01CA:  MOVF   3B,W
514
01CB:  MOVWF  25
516 515
.................... } 
517
01CD:  BCF    0A.3
518
01CE:  BCF    0A.4
519
01CF:  GOTO   2EE (RETURN)
516
01CC:  BCF    0A.3
517
01CD:  BCF    0A.4
518
01CE:  GOTO   2E1 (RETURN)
520 519
....................  
521 520
....................  
522 521
....................  
523 522
....................  
523
.................... #include <math.h> 
524
.................... //////////////////////////////////////////////////////////////////////////// 
525
.................... ////        (C) Copyright 1996,2008 Custom Computer Services            //// 
526
.................... //// This source code may only be used by licensed users of the CCS C   //// 
527
.................... //// compiler.  This source code may only be distributed to other       //// 
528
.................... //// licensed users of the CCS C compiler.  No other use, reproduction  //// 
529
.................... //// or distribution is permitted without written permission.           //// 
530
.................... //// Derivative programs created using this software in object code     //// 
531
.................... //// form are not restricted in any way.                                //// 
532
.................... //////////////////////////////////////////////////////////////////////////// 
533
.................... ////                                                                    //// 
534
.................... //// History:                                                           //// 
535
.................... ////  * 9/20/2001 :  Improvments are made to sin/cos code.              //// 
536
.................... ////                 The code now is small, much faster,                //// 
537
.................... ////                 and more accurate.                                 //// 
538
.................... ////  * 2/21/2007 :  Compiler handles & operator differently and does 
539
.................... ////                 not return generic (int8 *) so type cast is done   //// 
540
.................... ////                                                                    //// 
541
.................... //////////////////////////////////////////////////////////////////////////// 
524 542
....................  
543
.................... #ifndef MATH_H 
544
.................... #define MATH_H 
545
....................  
546
.................... #ifdef PI 
547
.................... #undef  PI 
548
.................... #endif 
549
.................... #define PI     3.1415926535897932 
550
....................  
551
....................  
552
.................... #define SQRT2  1.4142135623730950 
553
....................  
554
.................... //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279}; 
555
.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718}; 
556
....................  
557
.................... ///////////////////////////// Round Functions ////////////////////////////// 
558
....................  
559
.................... float32 CEIL_FLOOR(float32 x, unsigned int8 n) 
560
.................... { 
561
....................    float32 y, res; 
562
....................    unsigned int16 l; 
563
....................    int1 s; 
564
....................  
565
....................    s = 0; 
566
....................    y = x; 
567
....................  
568
....................    if (x < 0) 
569
....................    { 
570
....................       s = 1; 
571
....................       y = -y; 
572
....................    } 
573
....................  
574
....................    if (y <= 32768.0) 
575
....................   res = (float32)(unsigned int16)y; 
576
....................  
577
....................  else if (y < 10000000.0) 
578
....................    { 
579
....................   l = (unsigned int16)(y/32768.0); 
580
....................       y = 32768.0*(y/32768.0 - (float32)l); 
581
....................   res = 32768.0*(float32)l; 
582
....................   res += (float32)(unsigned int16)y; 
583
....................  } 
584
....................  
585
....................  else 
586
....................   res = y; 
587
....................  
588
....................  y = y - (float32)(unsigned int16)y; 
589
....................  
590
....................  if (s) 
591
....................   res = -res; 
592
....................  
593
....................  if (y != 0) 
594
....................  { 
595
....................   if (s == 1 && n == 0) 
596
....................    res -= 1.0; 
597
....................  
598
....................   if (s == 0 && n == 1) 
599
....................    res += 1.0; 
600
....................  } 
601
....................  if (x == 0) 
602
....................     res = 0; 
603
....................  
604
....................  return (res); 
605
.................... } 
606
....................  
607
.................... // Overloaded Functions to take care for new Data types in PCD 
608
.................... // Overloaded function CEIL_FLOOR() for data type - Float48 
609
.................... #if defined(__PCD__) 
610
.................... float48 CEIL_FLOOR(float48 x, unsigned int8 n) 
611
.................... { 
612
....................    float48 y, res; 
613
....................    unsigned int16 l; 
614
....................    int1 s; 
615
....................  
616
....................    s = 0; 
617
....................    y = x; 
618
....................  
619
....................    if (x < 0) 
620
....................    { 
621
....................       s = 1; 
622
....................       y = -y; 
623
....................    } 
624
....................  
625
....................    if (y <= 32768.0) 
626
....................   res = (float48)(unsigned int16)y; 
627
....................  
628
....................  else if (y < 10000000.0) 
629
....................    { 
630
....................   l = (unsigned int16)(y/32768.0); 
631
....................       y = 32768.0*(y/32768.0 - (float48)l); 
632
....................   res = 32768.0*(float32)l; 
633
....................   res += (float48)(unsigned int16)y; 
634
....................  } 
635
....................  
636
....................  else 
637
....................   res = y; 
638
....................  
639
....................  y = y - (float48)(unsigned int16)y; 
640
....................  
641
....................  if (s) 
642
....................   res = -res; 
643
....................  
644
....................  if (y != 0) 
645
....................  { 
646
....................   if (s == 1 && n == 0) 
647
....................    res -= 1.0; 
648
....................  
649
....................   if (s == 0 && n == 1) 
650
....................    res += 1.0; 
651
....................  } 
652
....................  if (x == 0) 
653
....................     res = 0; 
654
....................  
655
....................  return (res); 
656
.................... } 
657
....................  
658
....................  
659
.................... // Overloaded function CEIL_FLOOR() for data type - Float64 
660
.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n) 
661
.................... { 
662
....................    float64 y, res; 
663
....................    unsigned int16 l; 
664
....................    int1 s; 
665
....................  
666
....................    s = 0; 
667
....................    y = x; 
668
....................  
669
....................    if (x < 0) 
670
....................    { 
671
....................       s = 1; 
672
....................       y = -y; 
673
....................    } 
674
....................  
675
....................    if (y <= 32768.0) 
676
....................   res = (float64)(unsigned int16)y; 
677
....................  
678
....................  else if (y < 10000000.0) 
679
....................    { 
680
....................   l = (unsigned int16)(y/32768.0); 
681
....................       y = 32768.0*(y/32768.0 - (float64)l); 
682
....................   res = 32768.0*(float64)l; 
683
....................   res += (float64)(unsigned int16)y; 
684
....................  } 
685
....................  
686
....................  else 
687
....................   res = y; 
688
....................  
689
....................  y = y - (float64)(unsigned int16)y; 
690
....................  
691
....................  if (s) 
692
....................   res = -res; 
693
....................  
694
....................  if (y != 0) 
695
....................  { 
696
....................   if (s == 1 && n == 0) 
697
....................    res -= 1.0; 
698
....................  
699
....................   if (s == 0 && n == 1) 
700
....................    res += 1.0; 
701
....................  } 
702
....................  if (x == 0) 
703
....................     res = 0; 
704
....................  
705
....................  return (res); 
706
.................... } 
707
.................... #endif 
708
....................  
709
.................... //////////////////////////////////////////////////////////////////////////// 
710
.................... //   float floor(float x) 
711
.................... //////////////////////////////////////////////////////////////////////////// 
712
.................... // Description : rounds down the number x. 
713
.................... // Date : N/A 
714
.................... // 
715
.................... float32 floor(float32 x) 
716
.................... { 
717
....................    return CEIL_FLOOR(x, 0); 
718
.................... } 
719
.................... // Following 2 functions are overloaded functions of floor() for PCD 
720
.................... // Overloaded function floor() for data type - Float48 
721
.................... #if defined(__PCD__) 
722
.................... float48 floor(float48 x) 
723
.................... { 
724
....................    return CEIL_FLOOR(x, 0); 
725
.................... } 
726
....................  
727
.................... // Overloaded function floor() for data type - Float64 
728
.................... float64 floor(float64 x) 
729
.................... { 
730
....................    return CEIL_FLOOR(x, 0); 
731
.................... } 
732
.................... #endif 
733
....................  
734
....................  
735
.................... //////////////////////////////////////////////////////////////////////////// 
736
.................... //   float ceil(float x) 
737
.................... //////////////////////////////////////////////////////////////////////////// 
738
.................... // Description : rounds up the number x. 
739
.................... // Date : N/A 
740
.................... // 
741
.................... float32 ceil(float32 x) 
742
.................... { 
743
....................    return CEIL_FLOOR(x, 1); 
744
.................... } 
745
.................... // Following 2 functions are overloaded functions of ceil() for PCD 
746
.................... // Overloaded function ceil() for data type - Float48 
747
.................... #if defined(__PCD__) 
748
.................... float48 ceil(float48 x) 
749
.................... { 
750
....................    return CEIL_FLOOR(x, 1); 
751
.................... } 
752
....................  
753
.................... // Overloaded function ceil() for data type - Float64 
754
.................... float64 ceil(float64 x) 
755
.................... { 
756
....................    return CEIL_FLOOR(x, 1); 
757
.................... } 
758
.................... #endif 
759
....................  
760
....................  //////////////////////////////////////////////////////////////////////////// 
761
.................... //   float fabs(float x) 
762
.................... //////////////////////////////////////////////////////////////////////////// 
763
.................... // Description : Computes the absolute value of floating point number x 
764
.................... // Returns : returns the absolute value of x 
765
.................... // Date : N/A 
766
.................... // 
767
.................... #define fabs abs 
768
....................  
769
.................... //////////////////////////////////////////////////////////////////////////// 
770
.................... //   float fmod(float x) 
771
.................... //////////////////////////////////////////////////////////////////////////// 
772
.................... // Description : Computes the floating point remainder of x/y 
773
.................... // Returns : returns the value of x= i*y, for some integer i such that, if y 
774
.................... // is non zero, the result has the same isgn of x na dmagnitude less than the 
775
.................... // magnitude of y. If y is zero then a domain error occurs. 
776
.................... // Date : N/A 
777
.................... // 
778
....................  
779
.................... float fmod(float32 x,float32 y) 
780
.................... { 
781
....................    float32 i; 
782
....................    if (y!=0.0) 
783
....................    { 
784
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
785
....................       return(x-(i*y)); 
786
....................    } 
787
....................    else 
788
....................    { 
789
....................    #ifdef _ERRNO 
790
....................    { 
791
....................       errno=EDOM; 
792
....................    } 
793
....................    #endif 
794
....................    } 
795
.................... } 
796
.................... //Overloaded function for fmod() for PCD 
797
.................... // Overloaded function fmod() for data type - Float48 
798
.................... #if defined(__PCD__) 
799
.................... float48 fmod(float48 x,float48 y) 
800
.................... { 
801
....................    float48 i; 
802
....................    if (y!=0.0) 
803
....................    { 
804
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
805
....................       return(x-(i*y)); 
806
....................    } 
807
....................    else 
808
....................    { 
809
....................    #ifdef _ERRNO 
810
....................    { 
811
....................       errno=EDOM; 
812
....................    } 
813
....................    #endif 
814
....................    } 
815
.................... } 
816
.................... // Overloaded function fmod() for data type - Float64 
817
.................... float64 fmod(float64 x,float64 y) 
818
.................... { 
819
....................    float64 i; 
820
....................    if (y!=0.0) 
821
....................    { 
822
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
823
....................       return(x-(i*y)); 
824
....................    } 
825
....................    else 
826
....................    { 
827
....................    #ifdef _ERRNO 
828
....................    { 
829
....................       errno=EDOM; 
830
....................    } 
831
....................    #endif 
832
....................    } 
833
.................... } 
834
.................... #endif 
835
.................... //////////////////// Exponential and logarithmic functions //////////////////// 
836
.................... //////////////////////////////////////////////////////////////////////////// 
837
.................... //   float exp(float x) 
838
.................... //////////////////////////////////////////////////////////////////////////// 
839
.................... // Description : returns the value (e^x) 
840
.................... // Date : N/A 
841
.................... // 
842
.................... #define LN2 0.6931471805599453 
843
....................  
844
.................... float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093, 
845
....................                      0.0554965651,  0.240227138,  0.693147172}; 
846
....................  
847
....................  
848
.................... float32 exp(float32 x) 
849
.................... { 
850
....................    float32 y, res, r; 
851
....................    #if defined(__PCD__) 
852
....................    int8 data1; 
853
....................    #endif 
854
....................    signed int8 n; 
855
....................    int1 s; 
856
....................    #ifdef _ERRNO 
857
....................    if(x > 88.722838) 
858
....................    { 
859
....................       errno=ERANGE; 
860
....................       return(0); 
861
....................    } 
862
....................    #endif 
863
....................    n = (signed int16)(x/LN2); 
864
....................    s = 0; 
865
....................    y = x; 
866
....................  
867
....................    if (x < 0) 
868
....................    { 
869
....................       s = 1; 
870
....................       n = -n; 
871
....................       y = -y; 
872
....................    } 
873
....................  
874
....................    res = 0.0; 
875
.................... #if !defined(__PCD__) 
876
....................    *((unsigned int8 *)(&res)) = n + 0x7F; 
877
.................... #endif 
878
....................  
879
.................... #if defined(__PCD__)  // Takes care of IEEE format for PCD 
880
....................    data1 = n+0x7F; 
881
....................    if(bit_test(data1,0)) 
882
....................    bit_set(*(((unsigned int8 *)(&res)+2)),7); 
883
....................    rotate_right(&data1,1); 
884
....................    bit_clear(data1,7); 
885
....................    *(((unsigned int8 *)(&res)+3)) = data1; 
886
.................... #endif 
887
....................  
888
....................    y = y/LN2 - (float32)n; 
889
....................  
890
....................    r = pe[0]*y + pe[1]; 
891
....................    r = r*y + pe[2]; 
892
....................    r = r*y + pe[3]; 
893
....................    r = r*y + pe[4]; 
894
....................    r = r*y + pe[5]; 
895
....................  
896
....................    res = res*(1.0 + y*r); 
897
....................  
898
....................    if (s) 
899
....................       res = 1.0/res; 
900
....................    return(res); 
901
.................... } 
902
....................  
903
....................  
904
.................... //Overloaded function for exp() for PCD 
905
.................... // Overloaded function exp() for data type - Float48 
906
.................... #if defined(__PCD__) 
907
.................... float48 exp(float48 x) 
908
.................... { 
909
....................    float48 y, res, r; 
910
....................    int8 data1; 
911
....................    signed int8 n; 
912
....................    int1 s; 
913
....................    #ifdef _ERRNO 
914
....................    if(x > 88.722838) 
915
....................    { 
916
....................       errno=ERANGE; 
917
....................       return(0); 
918
....................    } 
919
....................    #endif 
920
....................    n = (signed int16)(x/LN2); 
921
....................    s = 0; 
922
....................    y = x; 
923
....................  
924
....................    if (x < 0) 
925
....................    { 
926
....................       s = 1; 
927
....................       n = -n; 
928
....................       y = -y; 
929
....................    } 
930
....................  
931
....................    res = 0.0; 
932
....................  
933
....................    data1 = n+0x7F; 
934
....................    if(bit_test(data1,0)) 
935
....................    bit_set(*(((unsigned int8 *)(&res)+4)),7); 
936
....................    rotate_right(&data1,1); 
937
....................    bit_clear(data1,7); 
938
....................    *(((unsigned int8 *)(&res)+5)) = data1; 
939
....................  
940
....................    y = y/LN2 - (float48)n; 
941
....................  
942
....................    r = pe[0]*y + pe[1]; 
943
....................    r = r*y + pe[2]; 
944
....................    r = r*y + pe[3]; 
945
....................    r = r*y + pe[4]; 
946
....................    r = r*y + pe[5]; 
947
....................  
948
....................    res = res*(1.0 + y*r); 
949
....................  
950
....................    if (s) 
951
....................       res = 1.0/res; 
952
....................    return(res); 
953
.................... } 
954
....................  
955
.................... // Overloaded function exp() for data type - Float64 
956
.................... float64 exp(float64 x) 
957
.................... { 
958
....................    float64 y, res, r; 
959
....................    unsigned int16 data1, data2; 
960
....................    unsigned int16 *p; 
961
....................    signed int16 n; 
962
....................    int1 s; 
963
....................    #ifdef _ERRNO 
964
....................    if(x > 709.7827128) 
965
....................    { 
966
....................       errno=ERANGE; 
967
....................       return(0); 
968
....................    } 
969
....................    #endif 
970
....................    n = (signed int16)(x/LN2); 
971
....................    s = 0; 
972
....................    y = x; 
973
....................  
974
....................    if (x < 0) 
975
....................    { 
976
....................       s = 1; 
977
....................       n = -n; 
978
....................       y = -y; 
979
....................    } 
980
....................  
981
....................    res = 0.0; 
982
....................  
983
.................... #if !defined(__PCD__) 
984
....................    *((unsigned int16 *)(&res)) = n + 0x7F; 
985
.................... #endif 
986
....................    p= (((unsigned int16 *)(&res))+3); 
987
....................    data1 = *p; 
988
....................    data2 = *p;    
989
....................    data1 = n + 0x3FF; 
990
....................    data1 = data1 <<4; 
991
....................    if(bit_test(data2,15)) 
992
....................    bit_set(data1,15); 
993
....................    data2 = data2 & 0x000F; 
994
....................    data1 ^= data2; 
995
....................  
996
....................    *(((unsigned int16 *)(&res)+3)) = data1; 
997
....................  
998
....................  
999
....................    y = y/LN2 - (float64)n; 
1000
....................  
1001
....................    r = pe[0]*y + pe[1]; 
1002
....................    r = r*y + pe[2]; 
1003
....................    r = r*y + pe[3]; 
1004
....................    r = r*y + pe[4]; 
1005
....................    r = r*y + pe[5]; 
1006
....................  
1007
....................    res = res*(1.0 + y*r); 
1008
....................  
1009
....................    if (s) 
1010
....................       res = 1.0/res; 
1011
....................    return(res); 
1012
.................... } 
1013
....................  
1014
.................... #ENDIF 
1015
....................  
1016
....................  
1017
.................... /************************************************************/ 
1018
....................  
1019
.................... float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
1020
.................... float32 const ql[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
1021
....................  
1022
.................... //////////////////////////////////////////////////////////////////////////// 
1023
.................... //   float log(float x) 
1024
.................... //////////////////////////////////////////////////////////////////////////// 
1025
.................... // Description : returns the the natural log of x 
1026
.................... // Date : N/A 
1027
.................... // 
1028
.................... float32 log(float32 x) 
1029
.................... { 
1030
....................    float32 y, res, r, y2; 
1031
....................    #if defined(__PCD__) 
1032
....................    unsigned int8  data1,data2; 
1033
....................    #endif 
1034
....................    signed int8 n; 
1035
....................    #ifdef _ERRNO 
1036
....................    if(x <0) 
1037
....................    { 
1038
....................       errno=EDOM; 
1039
....................    } 
1040
....................    if(x ==0) 
1041
....................    { 
1042
....................       errno=ERANGE; 
1043
....................       return(0); 
1044
....................    } 
1045
....................    #endif 
1046
....................    y = x; 
1047
....................  
1048
....................    if (y != 1.0) 
1049
....................    { 
1050
.................... #if !defined(__PCD__) 
1051
....................     *((unsigned int8 *)(&y)) = 0x7E;  
1052
.................... #endif 
1053
....................  
1054
.................... #if defined(__PCD__) // Takes care of IEEE format 
1055
....................    data2 = *(((unsigned int8 *)(&y))+3); 
1056
....................    *(((unsigned int8 *)(&y))+3) = 0x3F; 
1057
....................    data1 = *(((unsigned int8 *)(&y))+2); 
1058
....................    bit_clear(data1,7); 
1059
....................    *(((unsigned int8 *)(&y))+2) = data1; 
1060
....................    if(bit_test(data2,7)) 
1061
....................    bit_set(*(((unsigned int8 *)(&y))+3),7); 
1062
.................... #endif 
1063
....................  
1064
....................       y = (y - 1.0)/(y + 1.0); 
1065
....................  
1066
....................       y2=y*y; 
1067
....................  
1068
....................       res = pl[0]*y2 + pl[1]; 
1069
....................       res = res*y2 + pl[2]; 
1070
....................       res = res*y2 + pl[3]; 
1071
....................  
1072
....................       r = ql[0]*y2 + ql[1]; 
1073
....................       r = r*y2 + ql[2]; 
1074
....................       r = r*y2 + ql[3]; 
1075
....................  
1076
....................       res = y*res/r; 
1077
.................... #if !defined(__PCD__) 
1078
....................       n = *((unsigned int8 *)(&x)) - 0x7E; 
1079
.................... #endif 
1080
.................... #if defined(__PCD__)  
1081
....................     data1 = *(((unsigned int8 *)(&x)+3)); 
1082
....................     rotate_left(&data1,1); 
1083
....................     data2 = *(((unsigned int8 *)(&x)+2)); 
1084
....................     if(bit_test (data2,7)) 
1085
....................       bit_set(data1,0); 
1086
....................     n = data1 - 0x7E; 
1087
.................... #endif 
1088
....................  
1089
....................       if (n<0)  
1090
....................          r = -(float32)-n; 
1091
....................       else 
1092
....................          r = (float32)n; 
1093
....................  
1094
....................       res += r*LN2; 
1095
....................    } 
1096
....................  
1097
....................    else 
1098
....................       res = 0.0; 
1099
....................  
1100
....................    return(res); 
1101
.................... } 
1102
....................  
1103
.................... //Overloaded function for log() for PCD 
1104
.................... // Overloaded function log() for data type - Float48 
1105
.................... #if defined(__PCD__) 
1106
.................... float48 log(float48 x) 
1107
.................... { 
1108
....................    float48 y, res, r, y2; 
1109
....................    unsigned int8  data1,data2; 
1110
....................    signed int8 n; 
1111
....................    #ifdef _ERRNO 
1112
....................    if(x <0) 
1113
....................    { 
1114
....................       errno=EDOM; 
1115
....................    } 
1116
....................    if(x ==0) 
1117
....................    { 
1118
....................       errno=ERANGE; 
1119
....................       return(0); 
1120
....................    } 
1121
....................    #endif 
1122
....................    y = x; 
1123
....................  
1124
....................    if (y != 1.0) 
1125
....................    { 
1126
....................     
1127
....................    #if !defined(__PCD__) 
1128
....................        *((unsigned int8 *)(&y)) = 0x7E;  
1129
....................    #endif 
1130
....................       data2 = *(((unsigned int8 *)(&y))+5); 
1131
....................       *(((unsigned int8 *)(&y))+5) = 0x3F; 
1132
....................       data1 = *(((unsigned int8 *)(&y))+4); 
1133
....................       bit_clear(data1,7); 
1134
....................       *(((unsigned int8 *)(&y))+4) = data1; 
1135
....................    
1136
....................       if(bit_test(data2,7)) 
1137
....................          bit_set(*(((unsigned int8 *)(&y))+4),7); 
1138
....................       y = (y - 1.0)/(y + 1.0); 
1139
....................  
1140
....................       y2=y*y; 
1141
....................  
1142
....................       res = pl[0]*y2 + pl[1]; 
1143
....................       res = res*y2 + pl[2]; 
1144
....................       res = res*y2 + pl[3]; 
1145
....................  
1146
....................       r = ql[0]*y2 + ql[1]; 
1147
....................       r = r*y2 + ql[2]; 
1148
....................       r = r*y2 + ql[3]; 
1149
....................  
1150
....................       res = y*res/r; 
1151
....................  
1152
....................     data1 = *(((unsigned int8 *)(&x)+5)); 
1153
....................     rotate_left(&data1,1); 
1154
....................     data2 = *(((unsigned int8 *)(&x)+4)); 
1155
....................     if(bit_test (data2,7)) 
1156
....................        bit_set(data1,0); 
1157
....................       
1158
....................     n = data1 - 0x7E; 
1159
....................  
1160
....................       if (n<0) 
1161
....................          r = -(float48)-n; 
1162
....................       else 
1163
....................          r = (float48)n; 
1164
....................  
1165
....................       res += r*LN2; 
1166
....................    } 
1167
....................  
1168
....................    else 
1169
....................       res = 0.0; 
1170
....................  
1171
....................    return(res); 
1172
.................... } 
1173
....................  
1174
.................... // Overloaded function log() for data type - Float48 
1175
.................... #if defined(__PCD__) 
1176
.................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
1177
.................... float32 const ql_64[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
1178
.................... #endif 
1179
.................... float64 log(float64 x) 
1180
.................... { 
1181
....................    float64 y, res, r, y2; 
1182
....................    unsigned int16  data1,data2; 
1183
....................    unsigned int16 *p; 
1184
....................    signed int16 n; 
1185
....................    #ifdef _ERRNO 
1186
....................    if(x <0) 
1187
....................    { 
1188
....................       errno=EDOM; 
1189
....................    } 
1190
....................    if(x ==0) 
1191
....................    { 
1192
....................       errno=ERANGE; 
1193
....................       return(0); 
1194
....................    } 
1195
....................    #endif 
1196
....................    y = x; 
1197
....................  
1198
....................    if (y != 1.0) 
1199
....................    { 
1200
....................    #if !defined(__PCD__) 
1201
....................        *((unsigned int8 *)(&y)) = 0x7E;  
1202
....................    #endif 
1203
....................       p= (((unsigned int16 *)(&y))+3); 
1204
....................       data1 = *p; 
1205
....................       data2 = *p; 
1206
....................       data1 = 0x3FE; 
1207
....................       data1 = data1 <<4; 
1208
....................       if(bit_test (data2,15)) 
1209
....................       bit_set(data1,15); 
1210
....................       data2 = data2 & 0x000F; 
1211
....................       data1 ^=data2; 
1212
....................  
1213
....................       *p = data1; 
1214
....................  
1215
....................       y = (y - 1.0)/(y + 1.0); 
1216
....................  
1217
....................       y2=y*y; 
1218
....................  
1219
....................       res = pl_64[0]*y2 + pl_64[1]; 
1220
....................       res = res*y2 + pl_64[2]; 
1221
....................       res = res*y2 + pl_64[3]; 
1222
....................  
1223
....................       r = ql_64[0]*y2 + ql_64[1]; 
1224
....................       r = r*y2 + ql_64[2]; 
1225
....................       r = r*y2 + ql_64[3]; 
1226
....................  
1227
....................       res = y*res/r; 
1228
....................   
1229
....................       p= (((unsigned int16 *)(&x))+3); 
1230
....................       data1 = *p; 
1231
....................       bit_clear(data1,15); 
1232
....................       data1 = data1 >>4;     
1233
....................       n = data1 - 0x3FE; 
1234
....................  
1235
....................  
1236
....................       if (n<0) 
1237
....................          r = -(float64)-n; 
1238
....................       else 
1239
....................          r = (float64)n; 
1240
....................  
1241
....................       res += r*LN2; 
1242
....................    } 
1243
....................  
1244
....................    else 
1245
....................       res = 0.0; 
1246
....................  
1247
....................    return(res); 
1248
.................... } 
1249
.................... #endif 
1250
....................  
1251
....................  
1252
.................... #define LN10 2.3025850929940456 
1253
....................  
1254
.................... //////////////////////////////////////////////////////////////////////////// 
1255
.................... //   float log10(float x) 
1256
.................... //////////////////////////////////////////////////////////////////////////// 
1257
.................... // Description : returns the the log base 10 of x 
1258
.................... // Date : N/A 
1259
.................... // 
1260
.................... float32 log10(float32 x) 
1261
.................... { 
1262
....................    float32 r; 
1263
....................  
1264
....................    r = log(x); 
1265
....................    r = r/LN10; 
1266
....................    return(r); 
1267
.................... } 
1268
....................  
1269
.................... //Overloaded functions for log10() for PCD 
1270
.................... // Overloaded function log10() for data type - Float48 
1271
.................... #if defined(__PCD__) 
1272
.................... float48 log10(float48 x) 
1273
.................... { 
1274
....................    float48 r; 
1275
....................  
1276
....................    r = log(x); 
1277
....................    r = r/LN10; 
1278
....................    return(r); 
1279
.................... } 
1280
....................  
1281
.................... // Overloaded function log10() for data type - Float64 
1282
.................... float64 log10(float64 x) 
1283
.................... { 
1284
....................    float64 r; 
1285
....................  
1286
....................    r = log(x); 
1287
....................    r = r/LN10; 
1288
....................    return(r); 
1289
.................... } 
1290
.................... #endif 
1291
.................... //////////////////////////////////////////////////////////////////////////// 
1292
.................... //   float modf(float x) 
1293
.................... //////////////////////////////////////////////////////////////////////////// 
1294
.................... // Description :breaks the argument value int integral and fractional parts, 
1295
.................... // ach of which have the same sign as the argument.  It stores the integral part 
1296
.................... // as a float in the object pointed to by the iptr 
1297
.................... // Returns : returns the signed fractional part of value. 
1298
.................... // Date : N/A 
1299
.................... // 
1300
....................  
1301
.................... float32 modf(float32 value,float32 *iptr) 
1302
.................... { 
1303
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
1304
....................    return(value - *iptr); 
1305
.................... } 
1306
.................... //Overloaded functions for modf() for PCD 
1307
.................... // Overloaded function modf() for data type - Float48 
1308
.................... #if defined(__PCD__) 
1309
.................... float48 modf(float48 value,float48 *iptr) 
1310
.................... { 
1311
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
1312
....................    return(value - *iptr); 
1313
.................... } 
1314
.................... // Overloaded function modf() for data type - Float64 
1315
.................... float64 modf(float64 value,float64 *iptr) 
1316
.................... { 
1317
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
1318
....................    return(value - *iptr); 
1319
.................... } 
1320
.................... #endif 
1321
....................  
1322
.................... //////////////////////////////////////////////////////////////////////////// 
1323
.................... //   float pwr(float x,float y) 
1324
.................... //////////////////////////////////////////////////////////////////////////// 
1325
.................... // Description : returns the value (x^y) 
1326
.................... // Date : N/A 
1327
.................... // Note : 0 is returned when the function will generate an imaginary number 
1328
.................... // 
1329
.................... float32 pwr(float32 x,float32 y) 
1330
.................... { 
1331
....................    if(0 > x && fmod(y, 1) == 0) { 
1332
....................       if(fmod(y, 2) == 0) { 
1333
....................          return (exp(log(-x) * y)); 
1334
....................       } else { 
1335
....................          return (-exp(log(-x) * y)); 
1336
....................       } 
1337
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1338
....................       return 0; 
1339
....................    } else { 
1340
....................       if(x != 0 || 0 >= y) { 
1341
....................          return (exp(log(x) * y)); 
1342
....................       } 
1343
....................    } 
1344
.................... } 
1345
.................... //Overloaded functions for pwr() for PCD 
1346
.................... // Overloaded function pwr() for data type - Float48 
1347
.................... #if defined(__PCD__) 
1348
.................... float48 pwr(float48 x,float48 y) 
1349
.................... { 
1350
....................    if(0 > x && fmod(y, 1) == 0) { 
1351
....................       if(fmod(y, 2) == 0) { 
1352
....................          return (exp(log(-x) * y)); 
1353
....................       } else { 
1354
....................          return (-exp(log(-x) * y)); 
1355
....................       } 
1356
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1357
....................       return 0; 
1358
....................    } else { 
1359
....................       if(x != 0 || 0 >= y) { 
1360
....................          return (exp(log(x) * y)); 
1361
....................       } 
1362
....................    } 
1363
.................... } 
1364
.................... // Overloaded function pwr() for data type - Float64 
1365
.................... float64 pwr(float64 x,float64 y) 
1366
.................... { 
1367
....................    if(0 > x && fmod(y, 1) == 0) { 
1368
....................       if(fmod(y, 2) == 0) { 
1369
....................          return (exp(log(-x) * y)); 
1370
....................       } else { 
1371
....................          return (-exp(log(-x) * y)); 
1372
....................       } 
1373
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1374
....................       return 0; 
1375
....................    } else { 
1376
....................       if(x != 0 || 0 >= y) { 
1377
....................          return (exp(log(x) * y)); 
1378
....................       } 
1379
....................    } 
1380
.................... } 
1381
.................... #endif 
1382
....................  
1383
.................... //////////////////// Power functions //////////////////// 
1384
....................  
1385
.................... //////////////////////////////////////////////////////////////////////////// 
1386
.................... //   float pow(float x,float y) 
1387
.................... //////////////////////////////////////////////////////////////////////////// 
1388
.................... // Description : returns the value (x^y) 
1389
.................... // Date : N/A 
1390
.................... // Note : 0 is returned when the function will generate an imaginary number 
1391
.................... // 
1392
.................... float32 pow(float32 x,float32 y) 
1393
.................... { 
1394
....................    if(0 > x && fmod(y, 1) == 0) { 
1395
....................       if(fmod(y, 2) == 0) { 
1396
....................          return (exp(log(-x) * y)); 
1397
....................       } else { 
1398
....................          return (-exp(log(-x) * y)); 
1399
....................       } 
1400
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1401
....................       return 0; 
1402
....................    } else { 
1403
....................       if(x != 0 || 0 >= y) { 
1404
....................          return (exp(log(x) * y)); 
1405
....................       } 
1406
....................    } 
1407
.................... } 
1408
.................... //Overloaded functions for pow() for PCD 
1409
.................... // Overloaded function for pow() data type - Float48 
1410
.................... #if defined(__PCD__) 
1411
.................... float48 pow(float48 x,float48 y) 
1412
.................... { 
1413
....................    if(0 > x && fmod(y, 1) == 0) { 
1414
....................       if(fmod(y, 2) == 0) { 
1415
....................          return (exp(log(-x) * y)); 
1416
....................       } else { 
1417
....................          return (-exp(log(-x) * y)); 
1418
....................       } 
1419
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1420
....................       return 0; 
1421
....................    } else { 
1422
....................       if(x != 0 || 0 >= y) { 
1423
....................          return (exp(log(x) * y)); 
1424
....................       } 
1425
....................    } 
1426
.................... } 
1427
....................  
1428
.................... // Overloaded function pow() for data type - Float64 
1429
.................... float64 pow(float64 x,float64 y) 
1430
.................... { 
1431
....................    if(0 > x && fmod(y, 1) == 0) { 
1432
....................       if(fmod(y, 2) == 0) { 
1433
....................          return (exp(log(-x) * y)); 
1434
....................       } else { 
1435
....................          return (-exp(log(-x) * y)); 
1436
....................       } 
1437
....................    } else if(0 > x && fmod(y, 1) != 0) { 
1438
....................       return 0; 
1439
....................    } else { 
1440
....................       if(x != 0 || 0 >= y) { 
1441
....................          return (exp(log(x) * y)); 
1442
....................       } 
1443
....................    } 
1444
.................... } 
1445
.................... #endif 
1446
....................  
1447
.................... //////////////////////////////////////////////////////////////////////////// 
1448
.................... //   float sqrt(float x) 
1449
.................... //////////////////////////////////////////////////////////////////////////// 
1450
.................... // Description : returns the square root of x 
1451
.................... // Date : N/A 
1452
.................... // 
1453
.................... float32 sqrt(float32 x) 
1454
.................... { 
1455
....................    float32 y, res; 
1456
....................    #if defined(__PCD__) 
1457
....................    unsigned int16 data1,data2; 
1458
....................    #endif 
1459
....................    BYTE *p; 
1460
....................  
1461
....................    #ifdef _ERRNO 
1462
....................    if(x < 0) 
... Π­Ρ‚ΠΎΡ‚ diff ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. :@created_atf1417758694.3450041Œ:@expires_in0