]> gitweb.factorcode.org Git - factor.git/commitdiff
math.text.english: expand the supported number range
authorAlexander Ilin <alex.ilin@protonmail.com>
Wed, 15 Jun 2022 12:55:52 +0000 (14:55 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 15 Jun 2022 14:40:22 +0000 (07:40 -0700)
extra/math/text/english/english-tests.factor
extra/math/text/english/english.factor

index 4a455abd43deef5968ca0b139ce720a79aa74306..4729d1588d1a1c2fdae9ceb79d8bbf6c0594592a 100644 (file)
@@ -11,6 +11,7 @@ sequences tools.test ;
 { "one million, one thousand, one hundred and one" } [ 1001101 number>text ] unit-test
 { "one million, one hundred and eleven thousand, one hundred and eleven" } [ 1111111 number>text ] unit-test
 { "one duotrigintillion" } [ 10 99 ^ number>text ] unit-test
+{ "one noveducentillion" } [ 630 10^ number>text ] unit-test
 
 { "negative one hundred and twenty-three" } [ -123 number>text ] unit-test
 
index 662e46ef75f86157b2bd1b4a21a6396ad2652d99..226ced0e054f7b5f75a31ed6cafcec4d9283d70c 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (c) 2007, 2008, 2018 Aaron Schaefer.
+! Copyright (c) 2007, 2008, 2018 Aaron Schaefer, 2022 Alexander Ilin.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: combinators combinators.short-circuit kernel math
 math.order math.parser math.text.utils namespaces sequences
@@ -21,18 +21,48 @@ IN: math.text.english
         "seventy" "eighty" "ninety"
     } nth ;
 
-: scale-numbers ( n -- str )  ! up to 10^99
+: scale-numbers ( n -- str )  ! up to 10^630
     {
-        f "thousand" "million" "billion" "trillion" "quadrillion"
-        "quintillion" "sextillion" "septillion" "octillion"
-        "nonillion" "decillion" "undecillion" "duodecillion"
-        "tredecillion" "quattuordecillion" "quindecillion"
-        "sexdecillion" "septendecillion" "octodecillion" "novemdecillion"
-        "vigintillion" "unvigintillion" "duovigintillion" "trevigintillion"
-        "quattuorvigintillion" "quinvigintillion" "sexvigintillion"
-        "septvigintillion" "octovigintillion" "novemvigintillion"
-        "trigintillion" "untrigintillion" "duotrigintillion"
-    } nth ;
+        { [ dup 41 < ] [
+            {
+                f "thousand" "million" "billion" "trillion" "quadrillion"
+                "quintillion" "sextillion" "septillion" "octillion"
+                "nonillion" "decillion" "undecillion" "duodecillion"
+                "tredecillion" "quattuordecillion" "quindecillion"
+                "sexdecillion" "septendecillion" "octodecillion"
+                "novemdecillion" "vigintillion" "unvigintillion"
+                "duovigintillion" "trevigintillion" "quattuorvigintillion"
+                "quinvigintillion" "sexvigintillion" "septvigintillion"
+                "octovigintillion" "novemvigintillion" "trigintillion"
+                "untrigintillion" "duotrigintillion" "trestrigintillion"
+                "quattuortrigintillion" "quintrigintillion" "sestrigintillion"
+                "septentrigintillion" "octotrigintillion" "noventrigintillion"
+            } nth
+        ] }
+        { [ dup 311 < ] [
+            41 - 10 /mod [
+                {
+                    "quadragintillion" "quinquagintillion" "sexagintillion"
+                    "septuagintillion" "octogintillion" "nonagintillion"
+                    "centillion" "decicentillion" "viginticentillion"
+                    "trigintacentillion" "quadragintacentillion"
+                    "quinquagintacentillion" "sexagintacentillion"
+                    "septuagintacentillion" "octogintacentillion"
+                    "nonagintacentillion" "ducentillion"
+                } nth
+                ! Next 10^300 increments after ducentillion, which is 10^603:
+                ! "trecentillion" "quadringentillion"
+                ! "quingentillion" "sescentillion"
+                ! "septingentillion" "octingentillion"
+                ! "nongentillion" "millinillion" = 10^3003
+            ] [
+                {
+                    f "un" "duo" "tre" "quattuor"
+                    "quinqua" "se" "septe" "octo" "nove"
+                } nth
+            ] bi* swap "" append-as
+        ] }
+    } cond ;
 
 SYMBOL: and-needed?
 : set-conjunction ( seq -- )