Пример #1
0
        public KFraction Add(KFraction b)
        {
            BigInteger cm     = Denominator * b.Denominator;
            BigInteger newNum = Numerator * b.Denominator + b.Numerator * Denominator;

            return(new KFraction(newNum, cm).Reduce());
        }
Пример #2
0
        public static bool Numberp(KObject args, Func <KFraction, KFraction, bool> cmp)
        {
            int length = KPair.Length(args);

            if (length < 2)
            {
                throw new RuntimeException("at least two arguments");
            }
            else
            {
                KFraction first = ToExact(Check((args as KPair).Car));
                KObject   head  = (args as KPair).Cdr;
                while (head is KPair)
                {
                    KFraction next = NumbersModule.ToExact(NumbersModule.Check((head as KPair).Car));
                    if (!cmp(first, next))
                    {
                        return(false);
                    }

                    first = next;
                    head  = (head as KPair).Cdr;
                }
                return(true);
            }
        }
Пример #3
0
        public override object Do(KObject args, KEnvironment env, Continuation <KObject> cont)
        {
            CPara(args, 1);
            KFraction input = First(args) as KFraction;

            Check(input);
            return(new KDouble(input.ToDouble()));
        }
Пример #4
0
        public override object Do(KObject args, KEnvironment env, Continuation <KObject> cont)
        {
            CPara(args, 1);
            var inex = First(args) as KDouble;

            Check(inex);
            return(KFraction.fromDouble(inex.Value));
        }
Пример #5
0
 public static KFraction ToExact(KObject obj)
 {
     if (obj is KFraction)
     {
         return(obj as KFraction);
     }
     else
     {
         return(KFraction.fromDouble((obj as KDouble).Value));
     }
 }
Пример #6
0
 public bool LessEqual(KFraction b)
 {
     return(Numerator * b.Denominator <= b.Numerator * Denominator);
 }
Пример #7
0
 public bool LessThan(KFraction b)
 {
     return(Numerator * b.Denominator < b.Numerator * Denominator);
 }
Пример #8
0
 public KFraction Divide(KFraction b)
 {
     return(Multiply(new KFraction(b.Denominator, b.Numerator)));
 }
Пример #9
0
 public KFraction Multiply(KFraction b)
 {
     return(new KFraction(Numerator * b.Numerator, Denominator * b.Denominator).Reduce());
 }