<?xml version="1.0"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  -->

<document>

 <properties>
  <title>Apache Commons Numbers</title>
 </properties>

 <body>

  <section name="Commons Numbers: Number types and utilities" href="summary">
   <p>
      Commons Numbers provides implementations of number types and utilities.
      Features include
      <ul>
        <li>arithmetic</li>
        <li>primes</li>
        <li>fractions</li>
        <li>combinatorics</li>
        <li>complex numbers</li>
        <li>quaternions</li>
        <li>gamma functions</li>
        <li>root finding</li>
      </ul>
    </p>
  </section>

  <section name="Download Commons Numbers">
    <subsection name="Releases">
      <p>
        Download the
        <a href="http://commons.apache.org/numbers/download_numbers.cgi">
          Latest Release</a> of Commons Numbers.
      </p>
    </subsection>

  </section>
 </body>
</document>
