home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / progs / differen < prev    next >
Encoding:
Text File  |  1994-02-12  |  1.7 KB  |  65 lines

  1. go:-go('BMARK_differen:').
  2.  
  3. go(Mes):-differen(Mes,600).
  4.  
  5. /* Common functions...       */
  6.  
  7. print_times(Mes,T1,T2,T3,L0) :- L is 1000*L0,
  8.         TT1 is T2 - T1,
  9.         TT2 is T3 - T2,
  10.         TT is TT1 - TT2,
  11.         nl, write(Mes='Net Time'(TT)), nl,
  12.         Lips is L // TT,
  13.         Klips is Lips // 1000,
  14.         write('KLips are: '), write(Klips), nl.
  15.  
  16. compens_loop(0).
  17. compens_loop(X) :- Y is X - 1, compens_loop(Y).
  18.  
  19. /* --------------------------------------------------*/
  20. /*       differen (times10,divide10,log10,ops8)      */
  21. /*       These 4 examples are from Warren's thesis   */
  22. /*       differen(150) will do.                      */
  23.  
  24. differen(Mes,N) :- statistics(runtime,[X|_]),
  25.           differenloop(N),
  26.           statistics(runtime,[Now|_]),
  27.           compens_loop(N),
  28.           statistics(runtime,[M|_]),
  29.           Li is 71 * N,
  30.           print_times(Mes,X,Now,M,Li).
  31.  
  32. differenloop(0).
  33. differenloop(X) :- \+ \+(differen_top), Y is X - 1, differenloop(Y).
  34.  
  35. ds:-statistics,differen_top,statistics.
  36.  
  37. differen_top:-
  38.         times10(I1),
  39.         d(I1,x,_D1),
  40.         divide10(I2),
  41.         d(I2,x,_D2),
  42.         log10(I3),
  43.         d(I3,x,_D3),
  44.         ops8(I4),
  45.         d(I4,x,_D4).
  46.  
  47. d(F,X,DF):-df(F,X,DF),!.
  48. d(X,X,1).
  49. d(_C,_X,0).
  50.  
  51. df(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV).
  52. df(U-V,X,DU-DV) :- d(U,X,DU), d(V,X,DV).
  53. df(U*V,X,DU*V+U*DV) :- d(U,X,DU), d(V,X,DV).
  54. df(U/V,X,(DU*V-U*DV)/(^(V,2))) :- d(U,X,DU), d(V,X,DV).
  55. df(^(U,N),X,DU*N*(^(U,N1))) :- N1 is N - 1, d(U,X,DU).
  56. df(-U,X,-DU) :- d(U,X,DU).
  57. df(exp(U),X,exp(U)*DU) :- d(U,X,DU).
  58. df(log(U),X,DU/U) :- d(U,X,DU).
  59.  
  60.  
  61. times10( ((((((((x*x)*x)*x)*x)*x)*x)*x)*x)*x ).
  62. divide10( ((((((((x/x)/x)/x)/x)/x)/x)/x)/x)/x ).
  63. log10( log(log(log(log(log(log(log(log(log(log(x)))))))))) ).
  64. ops8( (x+1)*((^(x,2)+2)*(^(x,3)+3)) ).
  65.