Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4db31b49 authored by Hans Boehm's avatar Hans Boehm
Browse files

Implement percent and new inverse functions

Bug: 21493470

Add x^2 10^x and e^x functions, to make the recently added INV key
work as expected.

Implement % functionality.

10^x is essentially just macro expansions for now.

% and x^2 need trivial evaluator support to provide reasonable display
syntax.

We decided to add evaluator support for exp() as well.

Add corresponding exp() support to BoundedRational and its tests.

Tiny incidental changes for problems uncovered in the process:
Fix bug in tests/README.txt
Evaluate the constant e only once.
Add one more power test along with the exp() test.
Fix proguard.flags so BRTest runs again.

Change-Id: I26cfcaf6d99aeec11387297cc5586e2ddcab6add
parent e125edff
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -54,3 +54,5 @@
# Some small BoundedRational methods like equals() are not used by the
# calculator, but crucial for testing.
-keepclassmembers class com.android.calculator2.BoundedRational { *; }
# Need CR comparison operators for testing.
-keepclassmembers class com.hp.creals.CR { *; }
+27 −0
Original line number Diff line number Diff line
@@ -106,6 +106,15 @@
        android:contentDescription="@string/desc_fun_ln"
        android:text="@string/fun_ln" />

    <Button
        android:id="@+id/fun_exp"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="2"
        android:layout_column="0"
        android:contentDescription="@string/desc_fun_exp"
        android:text="@string/fun_exp"
        android:visibility="gone" />

    <Button
        android:id="@+id/fun_log"
        style="@style/PadButtonStyle.Advanced"
@@ -114,6 +123,15 @@
        android:contentDescription="@string/desc_fun_log"
        android:text="@string/fun_log" />

    <Button
        android:id="@+id/fun_10pow"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="2"
        android:layout_column="1"
        android:contentDescription="@string/desc_fun_10pow"
        android:text="@string/fun_10pow"
        android:visibility="gone" />

    <Button
        android:id="@+id/op_fact"
        style="@style/PadButtonStyle.Advanced"
@@ -170,4 +188,13 @@
        android:contentDescription="@string/desc_op_sqrt"
        android:text="@string/op_sqrt" />

    <Button
        android:id="@+id/op_sqr"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="4"
        android:layout_column="2"
        android:contentDescription="@string/desc_op_sqr"
        android:text="@string/op_sqr"
        android:visibility="gone" />

</GridLayout>
+27 −0
Original line number Diff line number Diff line
@@ -106,6 +106,15 @@
        android:contentDescription="@string/desc_fun_ln"
        android:text="@string/fun_ln" />

    <Button
        android:id="@+id/fun_exp"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="1"
        android:layout_column="1"
        android:contentDescription="@string/desc_fun_exp"
        android:text="@string/fun_exp"
        android:visibility="gone" />

    <Button
        android:id="@+id/fun_log"
        style="@style/PadButtonStyle.Advanced"
@@ -114,6 +123,15 @@
        android:contentDescription="@string/desc_fun_log"
        android:text="@string/fun_log" />

    <Button
        android:id="@+id/fun_10pow"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="1"
        android:layout_column="2"
        android:contentDescription="@string/desc_fun_10pow"
        android:text="@string/fun_10pow"
        android:visibility="gone" />

    <Button
        android:id="@+id/op_fact"
        style="@style/PadButtonStyle.Advanced"
@@ -170,4 +188,13 @@
        android:contentDescription="@string/desc_op_sqrt"
        android:text="@string/op_sqrt" />

    <Button
        android:id="@+id/op_sqr"
        style="@style/PadButtonStyle.Advanced"
        android:layout_row="2"
        android:layout_column="4"
        android:contentDescription="@string/desc_op_sqr"
        android:text="@string/op_sqr"
        android:visibility="gone" />

</GridLayout>
+27 −6
Original line number Diff line number Diff line
@@ -78,23 +78,37 @@
    <!-- Subtraction operator (e.g. "1 - 2"). [CHAR_LIMIT=1] -->
    <string name="op_sub" translatable="false"></string>

    <!-- Abbrev. name of cosine function (e.g. "cos(π)". [CHAR_LIMIT=4] -->
    <!-- Abbrev. name of cosine function (e.g. "cos(π)"). [CHAR_LIMIT=4] -->
    <string name="fun_cos" translatable="false">cos</string>
    <!-- Natural logarithm function (e.g. "ln(2)"). [CHAR_LIMIT=4] -->
    <string name="fun_ln" translatable="false">ln</string>
    <!-- Logarithm function (e.g. "log(10)"). [CHAR_LIMIT=4] -->
    <string name="fun_log" translatable="false">log</string>
    <!-- Abbrev. name of sine function (e.g. "sin(π)". [CHAR_LIMIT=4] -->
    <!-- Abbrev. name of sine function (e.g. "sin(π)"). [CHAR_LIMIT=4] -->
    <string name="fun_sin" translatable="false">sin</string>
    <!-- Abbrev. name of tangent function (e.g. "tan(π)". [CHAR_LIMIT=4] -->
    <!-- Abbrev. name of tangent function (e.g. "tan(π)"). [CHAR_LIMIT=4] -->
    <string name="fun_tan" translatable="false">tan</string>
    <!-- Abbrev. name of cosine function (e.g. "arccos(π)". [CHAR_LIMIT=5] -->
    <!-- Abbrev. name of cosine function (e.g. "arccos(π)"). [CHAR_LIMIT=5] -->
    <string name="fun_arccos" translatable="false">cos\u207B\u00B9</string>
    <!-- Abbrev. name of sine function (e.g. "arcsin(π)". [CHAR_LIMIT=5] -->
    <!-- Abbrev. name of sine function (e.g. "arcsin(π)"). [CHAR_LIMIT=5] -->
    <string name="fun_arcsin" translatable="false">sin\u207B\u00B9</string>
    <!-- Abbrev. name of tangent function (e.g. "arctan(π)". [CHAR_LIMIT=5] -->
    <!-- Abbrev. name of tangent function (e.g. "arctan(π)"). [CHAR_LIMIT=5] -->
    <string name="fun_arctan" translatable="false">tan\u207B\u00B9</string>

    <!-- Abbrev. name of base 10 exponential function (e.g. "10^6"). [CHAR_LIMIT=5] -->
    <string name="fun_10pow" translatable="false">10\u02E3</string>
    <!-- Abbrev. name of exponential function (e.g. "e^6"). [CHAR_LIMIT=5] -->
    <string name="fun_exp" translatable="false">e\u02E3</string>
    <!-- Abbrev. name of suffix square function on key (e.g. "17^2"). [CHAR_LIMIT=5] -->
    <string name="op_sqr" translatable="false">x\u00B2</string>
    <!--
      Abbrev. name of suffix square function in formula.
      "^2" does not work, since it blends into a later constant.
      -->
    <string name="squared" translatable="false">²</string>
    <!-- Abbrev. name of exponential function in formula.  -->
    <string name="exponential" translatable = "false">exp</string>

    <!-- Abbrev. name of degree mode [CHAR_LIMIT=4] -->
    <string name="mode_deg">deg</string>
    <!-- Abbrev. name of radian mode. [CHAR_LIMIT=4] -->
@@ -139,6 +153,13 @@
    <!-- Content description for 'arctan' button. [CHAR_LIMIT=NONE] -->
    <string name="desc_fun_arctan">inverse tangent</string>

    <!-- Content description for 10^ button. [CHAR_LIMIT=NONE] -->
    <string name="desc_fun_10pow">ten to the power of</string>
    <!-- Content description for e^ button. [CHAR_LIMIT=NONE] -->
    <string name="desc_fun_exp">exponential function</string>
    <!-- Content description for ^2 button. [CHAR_LIMIT=NONE] -->
    <string name="desc_op_sqr">squared</string>

    <!-- Content description for '+' button. [CHAR_LIMIT=NONE] -->
    <string name="desc_op_add">plus</string>
    <!-- Content description for '÷' button. [CHAR_LIMIT=NONE] -->
+13 −6
Original line number Diff line number Diff line
@@ -229,6 +229,14 @@ public class BoundedRational {
        return null;
    }

    private static BoundedRational map0to1(BoundedRational r) {
        if (r == null) return null;
        if (r.mNum.equals(BigInteger.ZERO)) {
            return ONE;
        }
        return null;
    }

    private static BoundedRational map1to0(BoundedRational r) {
        if (r == null) return null;
        if (r.mNum.equals(r.mDen)) {
@@ -345,12 +353,7 @@ public class BoundedRational {
    }

    public static BoundedRational cos(BoundedRational r) {
        // Maps 0 to 1, null otherwise
        if (r == null) return null;
        if (r.mNum.equals(BigInteger.ZERO)) {
            return ONE;
        }
        return null;
        return map0to1(r);
    }

    public static BoundedRational degreeCos(BoundedRational r) {
@@ -403,6 +406,10 @@ public class BoundedRational {
        return map1to0(r);
    }

    public static BoundedRational exp(BoundedRational r) {
        return map0to1(r);
    }

    // Return the base 10 log of n, if n is a power of 10, -1 otherwise.
    // n must be positive.
    private static long b10Log(BigInteger n) {
Loading