diff --git a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/complex/CompleteComplexNumbers.java b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/complex/CompleteComplexNumbers.java index cb64b26f..6968617b 100644 --- a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/complex/CompleteComplexNumbers.java +++ b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/complex/CompleteComplexNumbers.java @@ -52,4 +52,9 @@ public S e() { return of(getElementStructure().e()); } + @Override + public S φ() { + return of(getElementStructure().φ()); + } + } diff --git a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalElement.java b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalElement.java index 4e5f5066..95d0a759 100644 --- a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalElement.java +++ b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalElement.java @@ -19,7 +19,6 @@ import java.util.Optional; import org.checkerframework.checker.nullness.qual.NonNull; -import org.meeuw.configuration.ConfigurationService; import org.meeuw.math.*; import org.meeuw.math.abstractalgebra.*; import org.meeuw.math.abstractalgebra.complex.BigComplexNumber; @@ -29,6 +28,8 @@ import org.meeuw.math.operators.BasicAlgebraicIntOperator; import org.meeuw.math.uncertainnumbers.*; +import static org.meeuw.configuration.ConfigurationService.getConfigurationAspect; + /** * A real number (backend by a big decimal), element of {@link BigDecimalElement}. * @author Michiel Meeuwissen @@ -55,7 +56,10 @@ public class BigDecimalElement implements * e as a {@link BigDecimalElement} * @see Utils#e */ - public static final BigDecimalElement e = new BigDecimalElement(new BigDecimal(Utils.e), new BigDecimal("1e-" + (Utils.e.length() - 1))); + public static final BigDecimalElement e = new BigDecimalElement( + new BigDecimal(Utils.e), new BigDecimal("1e-" + (Utils.e.length() - 1))); + + private final BigDecimal value; private final BigDecimal uncertainty; @@ -111,7 +115,10 @@ public int compareTo(@NonNull BigDecimalElement compare) { @Override public BigDecimalElement sqr() { - return new BigDecimalElement(value.multiply(value), uncertainty.multiply(uncertainty)); + return new BigDecimalElement( + value.multiply(value), + uncertainty.multiply(uncertainty) + ); } @Override @@ -335,7 +342,7 @@ public > Optional castDirectly(Class clazz) @Override public boolean eq(BigDecimalElement that) { - return eq(that, Math.round( ConfigurationService.getConfigurationAspect(ConfidenceIntervalConfiguration.class).getSds() + 0.5f)); + return eq(that, Math.round( getConfigurationAspect(ConfidenceIntervalConfiguration.class).getSds() + 0.5f)); } @Override @@ -346,7 +353,7 @@ public boolean strictlyEquals(Object o) { } @Override public boolean equals(Object o) { - if (ConfigurationService.getConfigurationAspect(CompareConfiguration.class).isEqualsIsStrict()) { + if (getConfigurationAspect(CompareConfiguration.class).isEqualsIsStrict()) { return strictlyEquals(o); } else { return eq((BigDecimalElement) o); diff --git a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalField.java b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalField.java index d191e4db..9794231d 100644 --- a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalField.java +++ b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/BigDecimalField.java @@ -20,7 +20,6 @@ import java.util.*; import org.meeuw.math.Example; -import org.meeuw.math.Utils; import org.meeuw.math.abstractalgebra.*; import org.meeuw.math.abstractalgebra.complex.BigComplexNumbers; import org.meeuw.math.numbers.BigDecimalOperations; @@ -83,11 +82,16 @@ public BigDecimalElement atan2(BigDecimalElement y, BigDecimalElement x) { @Override public BigDecimalElement pi() { - return BigDecimalElement.of(Utils.PI); + return BigDecimalElement.PI; } @Override public BigDecimalElement e() { - return BigDecimalElement.of(Utils.e); + return BigDecimalElement.e; + } + + @Override + public BigDecimalElement φ() { + return (BigDecimalElement.ONE.plus(BigDecimalElement.of(5).sqrt())).dividedBy(2); } } diff --git a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/RealField.java b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/RealField.java index 5417b188..cd1b7b7f 100644 --- a/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/RealField.java +++ b/mihxil-algebra/src/main/java/org/meeuw/math/abstractalgebra/reals/RealField.java @@ -106,4 +106,8 @@ public RealNumber pi() { public RealNumber e() { return RealNumber.of(Math.E); } + @Override + public RealNumber φ() { + return RealNumber.of((1 + Math.sqrt(5)) / 2); + } } diff --git a/mihxil-algebra/src/test/java/org/meeuw/test/math/abstractalgebra/DocumentationTest.java b/mihxil-algebra/src/test/java/org/meeuw/test/math/abstractalgebra/DocumentationTest.java index 2e6379e9..e0233b7b 100644 --- a/mihxil-algebra/src/test/java/org/meeuw/test/math/abstractalgebra/DocumentationTest.java +++ b/mihxil-algebra/src/test/java/org/meeuw/test/math/abstractalgebra/DocumentationTest.java @@ -278,12 +278,21 @@ protected > List getOperators(Cla rest.append(o.stringify("", "")); } } + for (AlgebraicComparisonOperator o : target.getSupportedComparisonOperators()) { if (!rest.isEmpty()) { rest.append(' '); } rest.append(o.stringify("", "")); } + + for (AlgebraicIntOperator o : target.getSupportedIntOperators()) { + if (!rest.isEmpty()) { + rest.append(' '); + } + rest.append(o.stringify("x", "n")); + } + if (!rest.isEmpty()) { ops.add(new OperatorCell(rest).withTitle("other binary operators")); } @@ -308,6 +317,7 @@ protected > List getOperators(Cla } } + { List special = new ArrayList<>(); appendSpecials(special, clazz); diff --git a/mihxil-math/src/main/java/org/meeuw/math/abstractalgebra/CompleteField.java b/mihxil-math/src/main/java/org/meeuw/math/abstractalgebra/CompleteField.java index 9e97ce02..bc91e2eb 100644 --- a/mihxil-math/src/main/java/org/meeuw/math/abstractalgebra/CompleteField.java +++ b/mihxil-math/src/main/java/org/meeuw/math/abstractalgebra/CompleteField.java @@ -44,6 +44,14 @@ public interface CompleteField> extends Field< E e(); + default E π() { + return pi(); + } + + /** + * Golden ratio 1/1 + srt(5) + */ + E φ(); @Override default NavigableSet getSupportedOperators() { diff --git a/mihxil-math/src/main/java/org/meeuw/math/uncertainnumbers/field/UncertainRealField.java b/mihxil-math/src/main/java/org/meeuw/math/uncertainnumbers/field/UncertainRealField.java index c2984d58..cef4c958 100644 --- a/mihxil-math/src/main/java/org/meeuw/math/uncertainnumbers/field/UncertainRealField.java +++ b/mihxil-math/src/main/java/org/meeuw/math/uncertainnumbers/field/UncertainRealField.java @@ -78,4 +78,10 @@ public UncertainReal e() { return UncertainDoubleElement.of(Math.E, DoubleUtils.uncertaintyForDouble(Math.E)); } + @Override + public UncertainReal φ() { + double phi = (1d + Math.sqrt(5)) / 2; + return UncertainDoubleElement.of(phi, DoubleUtils.uncertaintyForDouble(phi)); + } + } diff --git a/mihxil-theories/src/main/java/org/meeuw/theories/abstractalgebra/CompleteFieldTheory.java b/mihxil-theories/src/main/java/org/meeuw/theories/abstractalgebra/CompleteFieldTheory.java index 6d643764..f4d82ad3 100644 --- a/mihxil-theories/src/main/java/org/meeuw/theories/abstractalgebra/CompleteFieldTheory.java +++ b/mihxil-theories/src/main/java/org/meeuw/theories/abstractalgebra/CompleteFieldTheory.java @@ -15,17 +15,21 @@ */ package org.meeuw.theories.abstractalgebra; +import java.math.MathContext; import java.util.Optional; import net.jqwik.api.ForAll; import net.jqwik.api.Property; +import org.meeuw.configuration.ConfigurationService; import org.meeuw.math.NonAlgebraic; import org.meeuw.math.abstractalgebra.*; import org.meeuw.math.exceptions.IllegalLogarithmException; import org.meeuw.math.exceptions.OverflowException; +import org.meeuw.math.numbers.MathContextConfiguration; import static org.meeuw.assertj.Assertions.assertThat; +import static org.meeuw.configuration.ConfigurationService.setConfiguration; import static org.meeuw.math.operators.BasicAlgebraicBinaryOperator.POWER; import static org.meeuw.math.operators.BasicAlgebraicUnaryOperator.*; @@ -84,4 +88,18 @@ default void cosPi(@ForAll(STRUCTURE) AlgebraicStructure struct) { assertThat(casted.pi().cos()).isEqTo(casted.one().negation()); } + @Property + default void goldenRatio(@ForAll(STRUCTURE) AlgebraicStructure struct) { + CompleteField casted = (CompleteField) struct; + try { + setConfiguration(builder -> + builder.configure(MathContextConfiguration.class, + (mathContextConfiguration) -> mathContextConfiguration.withContext(new MathContext(4)))); + assertThat(casted.φ().sqr()).isEqTo(casted.φ().plus(casted.one())); + } finally { + ConfigurationService.resetToDefaults(); + + } + } + }