7
$\begingroup$

When I do:

$Exp[$Times[$X9, $Subtract[$X1, 
        79.65469618540546`], $Divide[-66.89166439433642`, $Divide[
         110.36853933887411`, $X9]]]] /. {$Divide -> Divide, $Exp -> 
       Exp, $Subtract -> Subtract, $Times -> 
       Times, $X1 -> {-22.`, -22.`, -21.`, -21.`, -21.`, -21.`, -21.`, \
    -20.`, -20.`, -20.`, -19.`, -19.`, -19.`, -19.`, -18.`, -18.`, -17.`, \
    -17.`, -17.`, -16.`, -16.`, -16.`, -15.`, -15.`, -15.`, -15.`, -15.`, \
    -15.`, -14.`, -14.`, -14.`, -13.`, -13.`, -12.`, -12.`, -11.`, -11.`, \
    -11.`, -11.`, -11.`, -11.`, -11.`, -10.`, -10.`, -10.`, -9.`, -9.`, \
    -9.`, -9.`, -8.`, -8.`, -8.`, -8.`, -8.`, -7.`, -7.`, -7.`, -7.`, \
    -7.`, -7.`, -7.`, -6.`, -6.`, -6.`, -6.`, -6.`, -6.`, -6.`, -5.`, \
    -5.`, -5.`, -5.`, -5.`, -5.`, -4.`, -4.`, -4.`, -4.`, -4.`, -4.`, \
    -4.`, -4.`, -3.`, -3.`, -3.`, -3.`, -3.`, -3.`, -2.`, -2.`, -2.`, \
    -1.`, -1.`, -1.`, -1.`, -1.`, -1.`, -1.`, -1.`, -1.`, -1.`, 0.`, 0.`, 
        0.`, 0.`, 0.`, 0.`, 0.`, 1.`, 1.`, 1.`, 1.`, 1.`, 1.`, 2.`, 2.`, 
        2.`, 2.`, 2.`, 3.`, 3.`, 3.`, 4.`, 4.`, 4.`, 4.`, 4.`, 4.`, 4.`, 
        5.`, 5.`, 5.`, 5.`, 5.`, 5.`, 5.`, 5.`, 6.`, 6.`, 6.`, 6.`, 7.`, 
        7.`, 7.`, 7.`, 7.`, 7.`, 8.`, 8.`, 8.`, 8.`, 8.`, 8.`, 8.`, 9.`, 
        9.`, 9.`, 9.`, 9.`, 9.`, 9.`, 9.`, 9.`, 9.`, 10.`, 10.`, 10.`, 
        10.`, 10.`, 10.`, 11.`, 11.`, 11.`, 11.`, 11.`, 11.`, 11.`, 12.`, 
        12.`, 12.`, 12.`, 12.`, 12.`, 13.`, 13.`, 13.`, 13.`, 13.`, 13.`, 
        13.`, 13.`, 14.`, 14.`, 14.`, 14.`, 14.`, 14.`, 15.`, 15.`, 15.`, 
        15.`, 15.`, 15.`, 16.`, 16.`, 16.`, 16.`, 16.`, 16.`, 16.`, 16.`, 
        17.`, 17.`, 17.`, 17.`, 17.`, 18.`, 18.`, 18.`, 18.`, 18.`, 18.`, 
        18.`, 18.`, 18.`, 19.`, 19.`, 19.`, 19.`, 20.`, 20.`, 20.`, 20.`, 
        20.`, 20.`, 20.`, 21.`, 21.`, 21.`, 21.`, 22.`, 22.`, 22.`, 22.`, 
        22.`, 23.`, 23.`, 23.`, 23.`, 24.`, 24.`, 24.`, 24.`, 24.`, 24.`, 
        24.`, 24.`, 24.`, 24.`, 24.`, 24.`, 25.`, 25.`, 25.`, 25.`, 26.`, 
        26.`, 26.`, 26.`, 26.`, 26.`, 26.`, 26.`, 27.`, 27.`, 27.`, 27.`, 
        28.`, 28.`, 28.`, 28.`, 28.`, 28.`, 29.`, 29.`, 29.`, 30.`, 30.`, 
        30.`, 30.`, 31.`, 31.`, 31.`, 31.`, 31.`, 32.`, 32.`, 32.`, 33.`, 
        33.`, 34.`, 34.`, 34.`, 34.`, 34.`, 35.`, 35.`, 35.`, 35.`, 35.`, 
        35.`, 35.`, 36.`, 36.`, 36.`, 36.`, 36.`, 36.`, 36.`, 36.`, 37.`, 
        37.`, 37.`, 37.`, 37.`, 37.`, 37.`, 37.`, 38.`, 38.`, 38.`, 38.`, 
        38.`, 38.`, 39.`, 39.`, 39.`, 40.`, 40.`, 40.`, 40.`, 40.`, 40.`, 
        41.`, 41.`, 41.`, 41.`, 41.`, 41.`, 41.`, 41.`, 42.`, 42.`, 42.`, 
        42.`, 42.`, 42.`, 42.`, 42.`, 42.`, 43.`, 43.`, 43.`, 43.`, 43.`, 
        43.`, 43.`, 43.`, 43.`, 44.`, 44.`, 44.`, 44.`, 45.`, 45.`, 45.`, 
        45.`, 45.`, 46.`, 46.`, 46.`, 47.`, 47.`, 47.`, 47.`, 47.`, 47.`, 
        48.`, 48.`, 48.`, 48.`, 48.`, 48.`, 48.`, 48.`, 49.`, 49.`, 49.`, 
        49.`, 49.`, 49.`, 49.`, 49.`, 49.`, 49.`, 50.`, 50.`, 50.`, 50.`, 
        50.`, 50.`, 50.`, 50.`, 51.`, 51.`, 51.`, 51.`, 51.`, 51.`, 52.`, 
        52.`, 52.`, 52.`, 52.`, 52.`, 52.`, 52.`, 52.`, 52.`, 53.`, 53.`, 
        53.`, 53.`, 53.`, 53.`, 53.`, 54.`, 54.`, 54.`, 54.`, 54.`, 55.`, 
        55.`, 55.`, 55.`, 55.`, 55.`, 55.`, 56.`, 56.`, 56.`, 56.`, 57.`, 
        57.`, 57.`, 57.`, 57.`, 57.`, 57.`, 57.`, 57.`, 58.`, 58.`, 58.`, 
        58.`, 58.`, 58.`, 58.`, 58.`, 58.`, 58.`, 59.`, 59.`, 59.`, 59.`, 
        59.`, 59.`, 60.`, 60.`, 60.`, 60.`, 60.`, 60.`, 61.`, 61.`, 61.`, 
        61.`, 62.`, 62.`, 62.`, 62.`, 62.`, 62.`, 62.`, 62.`, 63.`, 63.`, 
        63.`, 63.`, 63.`, 63.`, 63.`, 63.`, 63.`, 63.`, 64.`, 64.`, 64.`, 
        64.`, 64.`, 65.`, 65.`, 66.`, 66.`, 66.`, 67.`, 67.`, 67.`, 67.`, 
        67.`, 67.`, 68.`, 68.`, 68.`, 68.`, 68.`, 68.`, 68.`, 69.`, 69.`, 
        69.`, 69.`, 69.`, 70.`, 70.`, 70.`, 70.`, 71.`, 72.`, 72.`, 73.`, 
        73.`, 73.`, 73.`, 74.`, 74.`, 74.`, 74.`, 74.`, 75.`, 75.`, 75.`, 
        75.`, 75.`, 76.`, 76.`, 76.`, 76.`, 76.`, 76.`, 77.`, 77.`, 77.`, 
        77.`, 78.`, 78.`, 78.`, 78.`, 78.`, 78.`, 78.`, 78.`, 78.`, 78.`, 
        78.`, 78.`, 78.`, 79.`, 79.`, 79.`, 79.`, 79.`, 79.`, 79.`, 79.`, 
        79.`, 79.`, 80.`, 80.`, 80.`, 80.`, 80.`, 81.`, 81.`, 81.`, 81.`, 
        82.`, 82.`, 83.`, 83.`}, $X9 -> {2028.`, 2002.`, 1987.`, 1959.`, 
        1977.`, 1996.`, 2044.`, 1979.`, 1950.`, 2038.`, 1989.`, 2012.`, 
        1933.`, 2061.`, 1942.`, 1956.`, 2015.`, 1946.`, 1974.`, 2073.`, 
        1986.`, 2050.`, 1984.`, 2039.`, 1951.`, 1906.`, 2030.`, 2049.`, 
        1993.`, 1990.`, 2057.`, 2029.`, 2019.`, 2017.`, 2004.`, 2045.`, 
        2013.`, 2004.`, 2050.`, 2023.`, 2023.`, 1946.`, 1916.`, 2065.`, 
        1997.`, 2038.`, 2042.`, 2057.`, 2015.`, 2049.`, 1952.`, 1986.`, 
        2036.`, 2020.`, 1983.`, 2037.`, 1998.`, 1970.`, 2021.`, 1979.`, 
        2042.`, 2013.`, 1903.`, 1960.`, 1976.`, 2025.`, 1965.`, 2029.`, 
        2056.`, 1876.`, 1977.`, 2074.`, 2057.`, 2070.`, 1988.`, 2054.`, 
        2011.`, 1998.`, 1933.`, 1978.`, 2007.`, 2064.`, 1941.`, 2036.`, 
        2054.`, 2030.`, 2057.`, 2019.`, 1965.`, 1992.`, 1973.`, 1985.`, 
        2049.`, 2024.`, 2059.`, 2008.`, 2013.`, 1975.`, 2072.`, 1960.`, 
        2006.`, 2021.`, 2020.`, 1967.`, 2071.`, 1946.`, 2076.`, 1956.`, 
        1990.`, 1977.`, 1975.`, 2013.`, 1980.`, 2084.`, 2016.`, 2005.`, 
        1970.`, 1900.`, 1945.`, 2042.`, 1967.`, 2001.`, 2024.`, 1960.`, 
        2011.`, 1986.`, 2025.`, 2012.`, 1998.`, 1892.`, 2085.`, 2046.`, 
        1949.`, 1961.`, 2065.`, 2098.`, 2012.`, 1950.`, 1948.`, 1997.`, 
        1976.`, 2027.`, 2010.`, 1989.`, 1971.`, 2001.`, 1896.`, 1945.`, 
        1958.`, 1992.`, 1939.`, 2012.`, 2075.`, 2114.`, 1995.`, 2065.`, 
        2030.`, 2062.`, 1967.`, 1947.`, 2019.`, 2075.`, 1908.`, 2024.`, 
        1918.`, 1911.`, 2051.`, 2005.`, 1983.`, 2037.`, 2060.`, 2018.`, 
        2007.`, 1980.`, 1967.`, 2083.`, 1993.`, 1998.`, 1973.`, 2026.`, 
        2006.`, 2140.`, 2045.`, 2012.`, 2049.`, 1980.`, 2015.`, 2003.`, 
        2027.`, 2072.`, 1938.`, 2114.`, 2005.`, 2089.`, 2035.`, 2016.`, 
        1988.`, 1919.`, 1997.`, 2079.`, 2017.`, 1975.`, 1923.`, 2067.`, 
        2003.`, 1993.`, 1938.`, 1950.`, 1978.`, 2039.`, 2000.`, 2009.`, 
        1981.`, 1946.`, 2012.`, 1965.`, 2065.`, 2036.`, 1968.`, 2041.`, 
        2015.`, 1981.`, 1997.`, 1968.`, 2048.`, 2021.`, 1967.`, 2042.`, 
        1972.`, 2041.`, 1922.`, 2024.`, 2005.`, 1934.`, 1996.`, 2053.`, 
        1930.`, 1970.`, 1981.`, 2055.`, 2005.`, 2038.`, 2029.`, 2024.`, 
        2012.`, 2048.`, 1987.`, 1999.`, 1980.`, 2008.`, 1981.`, 1930.`, 
        2000.`, 1985.`, 2014.`, 2063.`, 1998.`, 2031.`, 1980.`, 2031.`, 
        2002.`, 1994.`, 1930.`, 1998.`, 1982.`, 2051.`, 1961.`, 2098.`, 
        2058.`, 1963.`, 1972.`, 1916.`, 2049.`, 2081.`, 2066.`, 2045.`, 
        2034.`, 2017.`, 2011.`, 2030.`, 2003.`, 2002.`, 2012.`, 2046.`, 
        1995.`, 2028.`, 2037.`, 2001.`, 1993.`, 1960.`, 2022.`, 2017.`, 
        1915.`, 1982.`, 2028.`, 2031.`, 1980.`, 1991.`, 2030.`, 2008.`, 
        1939.`, 2062.`, 2046.`, 1989.`, 2009.`, 2030.`, 2089.`, 2015.`, 
        1939.`, 1995.`, 1915.`, 1979.`, 1988.`, 2003.`, 1953.`, 1921.`, 
        1989.`, 1976.`, 2062.`, 1920.`, 2074.`, 1927.`, 1925.`, 1976.`, 
        2029.`, 2064.`, 2006.`, 2106.`, 2088.`, 1985.`, 1986.`, 1997.`, 
        2016.`, 2026.`, 2063.`, 2003.`, 2059.`, 1985.`, 1898.`, 2035.`, 
        1993.`, 2013.`, 1990.`, 2027.`, 1965.`, 2051.`, 1942.`, 2028.`, 
        1957.`, 1943.`, 2046.`, 2030.`, 2031.`, 1968.`, 2010.`, 1945.`, 
        2014.`, 2025.`, 2012.`, 1971.`, 2026.`, 2090.`, 1985.`, 1998.`, 
        2044.`, 1999.`, 1889.`, 1903.`, 1978.`, 2077.`, 1998.`, 1994.`, 
        2027.`, 2036.`, 2035.`, 1927.`, 1961.`, 1972.`, 1944.`, 2027.`, 
        1962.`, 2037.`, 2033.`, 2029.`, 1957.`, 2007.`, 1953.`, 2055.`, 
        1952.`, 2037.`, 2065.`, 2064.`, 2011.`, 2020.`, 2030.`, 1983.`, 
        2002.`, 1955.`, 2056.`, 1984.`, 2038.`, 1951.`, 1953.`, 2059.`, 
        2032.`, 1970.`, 1928.`, 1997.`, 2048.`, 2040.`, 2064.`, 2017.`, 
        2039.`, 1989.`, 1978.`, 2016.`, 1940.`, 2009.`, 2029.`, 1987.`, 
        1956.`, 2020.`, 1994.`, 1957.`, 2029.`, 1953.`, 2035.`, 2057.`, 
        2052.`, 2009.`, 2009.`, 2001.`, 2049.`, 1968.`, 1922.`, 2051.`, 
        1991.`, 2041.`, 1968.`, 1997.`, 2040.`, 2016.`, 1963.`, 1955.`, 
        2001.`, 2039.`, 2053.`, 1996.`, 1932.`, 2038.`, 1988.`, 2061.`, 
        1938.`, 2000.`, 2027.`, 2030.`, 1982.`, 1920.`, 2029.`, 1986.`, 
        2041.`, 2013.`, 2003.`, 2013.`, 2007.`, 2020.`, 1932.`, 2002.`, 
        1959.`, 1985.`, 1959.`, 1999.`, 1969.`, 2075.`, 1980.`, 1995.`, 
        1963.`, 1964.`, 1957.`, 2015.`, 2012.`, 2040.`, 2124.`, 2073.`, 
        2058.`, 1991.`, 2048.`, 2053.`, 2086.`, 2002.`, 2024.`, 2011.`, 
        1964.`, 2041.`, 1921.`, 2004.`, 2018.`, 2048.`, 1999.`, 2120.`, 
        1993.`, 1965.`, 2068.`, 1966.`, 2027.`, 2037.`, 2009.`, 1999.`, 
        2006.`, 2001.`, 2052.`, 2011.`, 2025.`, 2012.`, 2027.`, 1982.`, 
        1981.`, 1921.`, 2095.`, 1967.`, 2049.`, 2004.`, 2000.`, 1993.`, 
        2009.`, 2034.`, 1963.`, 2050.`, 1940.`, 2067.`, 1959.`, 1974.`, 
        1984.`, 1945.`, 2012.`, 2087.`, 1961.`, 2009.`, 2016.`, 1996.`, 
        1987.`, 1966.`, 1965.`, 2033.`, 1990.`, 2053.`, 1985.`, 2091.`, 
        2002.`, 2010.`, 1990.`, 1944.`, 2065.`, 2015.`, 2006.`, 2002.`, 
        1997.`, 2031.`, 1959.`, 1987.`, 2022.`, 2017.`, 1984.`, 1989.`, 
        1968.`, 2082.`, 2047.`, 2048.`, 2002.`, 2033.`, 2063.`, 1970.`, 
        1970.`, 1971.`, 1937.`, 1920.`, 2066.`, 1955.`, 1992.`, 2103.`, 
        2076.`, 1921.`, 2065.`, 2076.`, 1970.`, 2028.`, 1981.`, 1989.`, 
        1997.`, 1964.`, 2132.`, 2069.`, 1925.`, 1986.`, 2033.`, 1981.`, 
    1965.`, 1996.`, 1916.`, 1976.`}}

I get:

    {Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, Inf`, \
    Inf`, Inf`, Inf`, Inf`, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., \
0., 0.}

Where the "Inf" is an actual symbol (followed by an actual "'").

However when I do a truncated version of the above:

$Exp[$Times[$X9, $Subtract[$X1, 
    79.65469618540546`], $Divide[-66.89166439433642`, $Divide[
     110.36853933887411`, $X9]]]] /. {$Divide -> Divide, $Exp -> 
   Exp, $Subtract -> Subtract, $Times -> 
   Times, $X1 -> {-22.`, -22.`, -21.`, -21.`, -21.`, -21.`, -21.`, \
-20.`, -20.`, -20.`, -19.`, -19.`, -19.`, -19.`, -18.`, -18.`, -17.`, \
-17.`, -17.`, -16.`, -16.`, 78.`, 78.`, 79.`, 79.`, 79.`, 79.`, 79.`, 
    79.`, 79.`, 79.`, 79.`, 79.`, 80.`, 80.`, 80.`, 80.`, 80.`, 81.`, 
    81.`, 81.`, 81.`, 82.`, 82.`, 83.`, 83.`}, $X9 -> {2028.`, 2002.`,
     1987.`, 1959.`, 1977.`, 1996.`, 2044.`, 1979.`, 1950.`, 2038.`, 
    1989.`, 2012.`, 1933.`, 2061.`, 1942.`, 1956.`, 2015.`, 1946.`, 
    1974.`, 2073.`, 1986.`,
    1920.`, 2066.`, 1955.`, 1992.`, 2103.`, 2076.`, 1921.`, 2065.`, 
    2076.`, 1970.`, 2028.`, 1981.`, 1989.`, 1997.`, 1964.`, 2132.`, 
    2069.`, 1925.`, 1986.`, 2033.`, 1981.`, 1965.`, 1996.`, 1916.`, 
    1976.`}}

I get typical MMA answers.

Any idea of what might be going on?

This is MMA 12.3.1 on Windows 10. I have reported it to Wolfram.

$\endgroup$
4
  • 2
    $\begingroup$ Whatever causes this doesn't reproduce in my machine on v13.0 or later. I can reproduce it on v12.2 (might be there on earlier versions too) to v12.3.1. $\endgroup$
    – kirma
    Mar 26 at 2:23
  • 2
    $\begingroup$ I beileve it is underflow/overflow at machine precision. Doesn't happen on my Mac M1. Try SetSystemOptions["PackedArrayOptions" -> {"ListableAutoPackLength" -> 750}] (works on linux/wolframcloud) $\endgroup$
    – Michael E2
    Mar 26 at 2:34
  • 1
    $\begingroup$ Related: mathematica.stackexchange.com/questions/19026/… $\endgroup$
    – Michael E2
    Mar 26 at 17:11
  • $\begingroup$ I see the same issue on v13.2, AMD CPU, Windows 10. Reported as CASE:5016456. $\endgroup$ Apr 9 at 21:04

3 Answers 3

5
$\begingroup$

Update: Kinda found the parameter for the second threshold

Here is how the bug manifests itself on Linux (WolframCloud), V13.2.0., on an Intel cpu. (This does not happen on my Mac M1 Max.)

It is connected with automatic vectorization. There seem to be two thresholds. One is controlled by a system option which the user can control. The other one is internal, and I cannot discover a way to control it from within Mathematica.

The first one controls when a list is packed automatically as an argument to (certain?) listable functions. By default a list of length 250 or longer is auto-packed. It can be set to n with the following:

SetSystemOptions[
 "PackedArrayOptions" -> {"ListableAutoPackLength" -> n}]

[Updated:} The second threshold causes the bug to occur for packed arrays of length 32 or longer in the OP's input provided there is floating-point overflow followed by underflow. The threshold appears in the "ParallelOptions" system option:

SetSystemOptions["ParallelOptions" -> "VectorVendorLengthThresholds" -> {128, 32, 32}]

It's the first 32 that affects the OP's example. If it is reset so that auto-parallelization is not invoked on the Exp that wraps the OP's example (see the new MWE at the end):

SetSystemOptions["ParallelOptions" -> "VectorVendorLengthThresholds" -> {128, 600, 32}]

I assume it is because a parallelized/vectorized version of Exp in the MKL is called. I believe (I really mean I made a wild guess) that the bug comes from a problem in handling signals from the floating point exceptions, in particular both overflow and underflow. It seems when an underflow occurs after an overflow, it cancels or masks overflow signals from the earlier results in processing the input arrays.

I modified the OP's example. The lengths of the input arrays are each 32, the minimum needed on the WolframCloud machines. The results up to but not including the last are overflows; the last result underflows to 0..

  1. If I do not reset the "ListableAutoPackLength" to less than 32, then no bug.
  2. If I set the "ListableAutoPackLength" to less than 80, then we see the OP's bug.
  3. When I reverse the input arrays and set "ListableAutoPackLength" to less than 32, the underflow occurs first and we don't see the bug.

These were performed with the default settings of "VectorVendorLengthThresholds", so that the threshold stays at 32.


Quit[]

$Version

(* Out[1]= 13.2.0 for Linux x86 (64-bit) (December 12, 2022) *)

No bug:

$Exp[$Times[$X9, $Subtract[$X1, 
    79.65469618540546`], $Divide[-66.89166439433642`, $Divide[
     110.36853933887411`, $X9]]]] /. {$Divide -> Divide, $Exp -> 
   Exp, $Subtract -> Subtract, $Times -> 
   Times, $X1 ->Developer`FromPackedArray[N@Range[80-31,80]], 
   $X9 -> Developer`FromPackedArray[N@Range[80-31,80]]}

General::munfl: Exp[-1339.39] is too small to represent as a normalized machine number; precision may be lost.

(* Out[2]=
{1.40584175992*^19373,..., 3.066335212129*^1075,
 0.}
*)

Bug:

SetSystemOptions["PackedArrayOptions" ->
   {"ListableAutoPackLength" -> 50}];

$Exp[$Times[$X9, $Subtract[$X1, 
    79.65469618540546`], $Divide[-66.89166439433642`, $Divide[
     110.36853933887411`, $X9]]]] /. {$Divide -> Divide, $Exp -> 
   Exp, $Subtract -> Subtract, $Times -> 
   Times, $X1 ->Developer`FromPackedArray[N@Range[80-31,80]], 
   $X9 -> Developer`FromPackedArray[N@Range[80-31,80]]}

(* Out[4]=  
{Inf`,...,Inf`,
 0.}
*)

No bug, but no underflow warning:

$Exp[$Times[$X9, $Subtract[$X1, 
    79.65469618540546`], $Divide[-66.89166439433642`, $Divide[
     110.36853933887411`, $X9]]]] /. {$Divide -> Divide, $Exp -> 
   Exp, $Subtract -> Subtract, $Times -> 
   Times, $X1 ->Developer`FromPackedArray[N@Range[80-31,80]//Reverse], 
   $X9 -> Developer`FromPackedArray[N@Range[80-31,80]//Reverse]}

(* Out[5]= 
{0.,
 3.066335212129*^1075,...,1.40584175992*^19373}
*)

It seems there's problem with signaling of floating-point exceptions in vectorized evaluation. Somehow, though, in this case, Mathematica knew that there were machine infinities (Inf` ) that needed to be recalculated with arbitrary precision.


Update: MWE

Here's a fairly minimal example (again on Linux/WolframCloud):

Exp[-100 Range[-21.,10.]]
(*
{Inf`, <<12>>, Inf`,
  1.01423*^304, <<13>>, 9.85968*^-305,
  0.,0.,0.}
*)
$\endgroup$
6
  • $\begingroup$ Thanks Michael, this is very helpful. So the workaround is to either shut down auto packing via 'ListableAutoPackLength' or to Reverse the inputs, is that right? I'm not sure the latter solution is very practical though as it must certainly be data-dependent, is that right? (How did you come to discover the Reverse solution, anyway!?) $\endgroup$ Mar 27 at 10:13
  • 1
    $\begingroup$ @berniethejet Another alternative workaround should be to make everything arbitrary precision. As for Reverse, it works here because an overflow occurs after an underflow. I would expect that if there were underflows at the beginning and at the end, then Reverse would not fix the bug. I thought of Reverse because the idea that multiple signals from multiple exceptions were being mishandled, and I wanted to see if order matters. $\endgroup$
    – Michael E2
    Mar 27 at 11:32
  • $\begingroup$ Thanks @Michael, that is interesting. I assume the arbitrary precision solution will not work in my case because it slows things down a great deal. This is for the evaluation of the fits of a genetic algorithm and I imagine that arbitrary precision will be an order of magnitude slower (but I haven't tried it). $\endgroup$ Mar 27 at 16:12
  • 1
    $\begingroup$ @berniethejet Perhaps result/.x_Real/;Abs[x]>$MaxMachineNumber:>DirectedInfinity[Sign[x]] would be helpful. Or WithCleanup[setoptions, code, resetoptions]. -- Note avoiding the bug ends up using arbitrary precision anyway. You could use SetPrecision to use arbitrary precision on selected parts of the computation. Another approach, which may or may not work, is to work with the logarithm of the quantity. (It seems the last Exp is the problem in the example.) $\endgroup$
    – Michael E2
    Mar 27 at 16:26
  • 1
    $\begingroup$ @berniethejet I updated my explanation. I don't know where the initial apparent threshold of length >= 80 comes from. Probably it was my fault. If I play with the system parameters, I can control that threshold. $\endgroup$
    – Michael E2
    Mar 27 at 17:09
2
$\begingroup$

Convert the Trace of your expression into a String

trs = ToString[Trace[... ..]];

pos = StringPosition[trs, "Inf"];

As you see, the |Esc| inf |Esc| input of [Infintity] in the notebook is copied by Ctrl+C as "Inf"

A strange pattern occurs at the end of the table. at 164000. What is more confusing, the fine tune variable m runs havoc despite Hold and ToString. There seems to be a mysterious superstring at work in the interpreter, that cannot be inactivated.

Manipulate[
 Hold @@ {Quiet[Unevaluated[StringTake[trs, {n + m, n + m + 400}]]]}, {m, 1, 
  100}, {{n, 164000}, 1, StringLength[trs] - 200}, ControlPlacement -> Bottom]
$\endgroup$
3
  • $\begingroup$ As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center. $\endgroup$
    – Community Bot
    Mar 26 at 13:53
  • $\begingroup$ Thanks @Roland. It seems to be some deep hard to find bug. I'm just surprised it has never been discovered before. $\endgroup$ Mar 26 at 19:30
  • 1
    $\begingroup$ @berniethejet I think I've seen it before, but it would have been on an Intel cpu, which I no longer have. That's how I figured it out on linux. The circumstances that cause it may be different. Did you try my suggestion? This answer verges on nonsense as far as I can tell, which is not very far since I can't test it on Windows. At best it would seem to give a complicated way of seeing what we already know from what you posted in the question. $\endgroup$
    – Michael E2
    Mar 26 at 21:13
2
$\begingroup$

Adding to Michael's answer:

Inf` is not a symbol. Inf` or NaN` are printed when a machine precision infinity or NaN are present in a packed array. Generally, this should not happen, as Mathematica will not work properly with such values. See here for some more information: Passing back "NaN`" and "Inf`" to C via MathLink If manage to produce Inf` values without using the LibraryLink or WSTP C APIs, that's almost certainly a bug.

$\endgroup$
8
  • $\begingroup$ Thanks Szabolcs. If this Inf' is not a symbol then what is it? I understand that it isn't any sort of official symbol, and I gather that it is some C-side code/glyph/string that has slipped past MMA's processing back to the front end where it manifests as a symbol, no? Or does the " ` " imbue it with additional properties? But the attaching of the " ` " certainly makes it impossible to operate on... $\endgroup$ Mar 27 at 10:26
  • 2
    $\begingroup$ @berniethejet The Head of an Inf` is Real, and Developer`MachineRealQ on it returns True. So as Szabolcs said, it's a floating-point infinity. The backtick is the mark added to a machine-real number, which is what I assume it means here. However, if you multiply it by 2., you get 0., which is not IEEE 754 compliant. $\endgroup$
    – Michael E2
    Mar 27 at 11:43
  • 1
    $\begingroup$ "had tried copying and pasting the Inf` to another cell and FullForm-ing it and so on, with no luck" That's what I mean by "not a symbol", and "should not be possible to create this value". $\endgroup$
    – Szabolcs
    Mar 27 at 18:02
  • 1
    $\begingroup$ If you explicitly unpack the packed array (Developer`FromPackedArray), it becomes a proper Infinity symbol, but the array will take up much more memory. This is what I currently do in IGraph/M, where I do get infinities and NaN from C code. $\endgroup$
    – Szabolcs
    Mar 27 at 18:03
  • 1
    $\begingroup$ "Or perhaps this is the gist of Szabolcs' link, that there is no way to operate on 'Inf'?" You can operate on it but the results will sometimes be wrong or inconsistent. Mathematica's functions are not prepared to handle machine precision infinities and NaNs. So you shouldn't, if you want reliable results. I wouldn't be surprised if some functions even crashed when given these values. But the fact that you are able to produce these values indicates a bug in Mathematica. This should not be possible at all. $\endgroup$
    – Szabolcs
    Mar 27 at 18:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.