Advertisement
double_trouble

derevo vyrazheniy

Jun 9th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.73 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Linq;
  7. using System.Linq.Expressions;
  8.  
  9. namespace ConsoleApplication16
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             ParameterExpression result = Expression.Parameter(typeof(double), "result");
  16.             ParameterExpression value = Expression.Parameter(typeof(double), "value");
  17.             ParameterExpression i = Expression.Parameter(typeof(double), "i");
  18.             ParameterExpression chisl = Expression.Parameter(typeof(double), "chisl");
  19.             ParameterExpression znam = Expression.Parameter(typeof(double), "znam");
  20.  
  21.             LabelTarget label = Expression.Label(typeof(double));
  22.             BlockExpression block = Expression.Block(
  23.                 new[] { result,  chisl, znam, i},
  24.                 Expression.Assign(result, Expression.Constant(0.0)),
  25.                 Expression.Assign(i, Expression.Constant(1.0)),
  26.                 Expression.Assign(chisl, value),
  27.                 Expression.MultiplyAssign(chisl, value),
  28.                 Expression.MultiplyAssign(chisl, value),
  29.                 Expression.Assign(znam, Expression.Constant(3.0)),
  30.                 Expression.Loop(
  31.                     Expression.IfThenElse(
  32.                         Expression.LessThan(i, Expression.Constant(1000.0)),
  33.                         Expression.Block(
  34.                             Expression.AddAssign(result, Expression.Divide(chisl, znam)),
  35.                             Expression.Assign(znam, Expression.Constant(1.0)),
  36.                             Expression.AddAssign(i, Expression.Constant(1.0)),
  37.                             Expression.MultiplyAssign(chisl, value),
  38.                             Expression.MultiplyAssign(chisl, value),
  39.                             Expression.MultiplyAssign(znam, i),
  40.                             Expression.MultiplyAssign(znam, i),
  41.                             Expression.MultiplyAssign(znam, Expression.Constant(4.0)),
  42.                             Expression.SubtractAssign(znam, Expression.Constant(1.0)),
  43.                             Expression.MultiplyAssign(chisl, Expression.Constant(-1.0))
  44.                             ),
  45.                         Expression.Break(label, result)
  46.                         ),
  47.                     label
  48.                     ), result
  49.        
  50.                 );
  51.  
  52.             for (double x = 0.1; x < 1; x += 0.1)
  53.             {
  54.                 double sum = Expression.Lambda<Func<double, double>>(block, value).Compile()(x);
  55.                 Console.WriteLine("{0}\t{1}", Math.Round(sum, 3), Math.Round((1 + x * x)*Math.Atan(x)/2 - x/2, 3));
  56.  
  57.             }
  58.  
  59.  
  60.            
  61.         }
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement