1
0
mirror of https://github.com/chylex/Query.git synced 2025-07-06 00:04:39 +02:00

Compare commits

...

3 Commits

Author SHA1 Message Date
d52ec8a615
Release 2.1.0 2025-07-03 07:47:25 +02:00
5d640de7e5
Preserve rational number arithmetic for roots of perfect powers 2025-07-03 06:35:39 +02:00
d69c4672d6
Reformat code 2025-07-03 06:22:09 +02:00
22 changed files with 272 additions and 258 deletions

View File

@ -35,15 +35,29 @@ public abstract record Number : IAdditionOperators<Number, Number, Number>,
public override Number Pow(Number exponent) {
if (exponent is Rational { Value: {} rationalExponent }) {
Fraction fractionExponent = rationalExponent.GetImproperFraction();
if (fractionExponent.Denominator == 1 && fractionExponent.Numerator >= 0) {
Fraction fractionExponent = Fraction.ReduceToProperFraction(rationalExponent.GetImproperFraction());
if (fractionExponent.Numerator >= 0 && fractionExponent.Denominator == 1) {
try {
return new Rational(BigRational.Pow(Value, fractionExponent.Numerator));
} catch (OverflowException) {}
}
if (fractionExponent.Numerator == 1 && fractionExponent.Denominator > 1) {
Number result = PowAsDecimal(exponent);
BigRational assumedPerfectPowerRoot = new BigRational(decimal.Floor(result.AsDecimal));
BigRational assumedPerfectPower = BigRational.Pow(assumedPerfectPowerRoot, fractionExponent.Denominator);
return assumedPerfectPower == Value ? assumedPerfectPowerRoot : result;
}
}
return new Decimal(AsDecimal).Pow(exponent);
return PowAsDecimal(exponent);
Number PowAsDecimal(Number number) {
return new Decimal(AsDecimal).Pow(number);
}
}
public override string ToString(IFormatProvider? formatProvider) {

View File

@ -8,7 +8,7 @@
<PropertyGroup>
<Authors>chylex</Authors>
<Version>2.0.0.0</Version>
<Version>2.1.0.0</Version>
</PropertyGroup>
<PropertyGroup>