Commits (18)
......@@ -33,11 +33,7 @@ real/anna/anna
real/bspt/bspt
real/cacheprof/cacheprof
real/compress/compress
real/compress/compress.stdin
real/compress/compress.stdout
real/compress2/compress2
real/compress2/compress2.stdin
real/compress2/compress2.stdout
real/eff/CS/CS
real/eff/CSD/CSD
real/eff/FS/FS
......@@ -56,7 +52,7 @@ real/hpg/hpg
real/infer/infer
real/lift/lift
real/linear/linear
real/maillist/runtime_files/addresses.tex
real/maillist/runtime_files/*.tex
real/maillist/maillist
real/mkhprog/mkhprog
real/parser/parser
......@@ -96,7 +92,11 @@ shootout/spectral-norm/spectral-norm
spectral/ansi/ansi
spectral/atom/atom
spectral/awards/awards
spectral/awards/*.stdout
spectral/awards/*.slowstdout
spectral/banner/banner
spectral/banner/*stdout
spectral/banner/*stdin
spectral/boyer/boyer
spectral/boyer2/boyer2
spectral/calendar/calendar
......
validate:
image: ghcci/x86_64-linux-deb9:0.2
before_script:
- git clean -xdf
- sudo apt install -y time
script:
- make clean
- |
cabal update
cabal install regex-compat html
- make boot mode=fast
- "make mode=fast NoFibRuns=1 2>&1 | tee log"
- "nofib-analyse/nofib-analyse log"
- |
# The following checks that `make distclean` removes any files reported
# by `git clean -fxd`
make distclean
files=$(git clean -nxd | cut -d" " -f3 | sed "/log/d")
if ! [ -z $files ]
then
echo "The following files weren't cleaned:\n$files"
exit 1
fi
# Syntax: https://docs.gitlab.com/ee/user/project/code_owners.html
* @sgraf812 @bgamari
\ No newline at end of file
......@@ -3,6 +3,14 @@
This is the root directory of the "NoFib Haskell benchmark suite". It
should be part of a GHC source tree, that is the 'nofib' directory
should be at the same level in the tree as 'compiler' and 'libraries'.
This makes sure that NoFib picks up the stage 2 compiler from the
surrounding GHC source tree.
You can also clone this repository in isolation, in which case it will
pick `$(which ghc)` or whatever the `HC` environment variable is set to.
Additional information can also be found on
[NoFib's wiki page](https://ghc.haskell.org/trac/ghc/wiki/Building/RunningNoFib).
## Package Depedencies
......@@ -13,23 +21,55 @@ system GHC:
## Using
<details>
<summary>Git symlink support for Windows machines</summary>
NoFib uses a few symlinks here and there to share code between benchmarks.
Git for Windows has symlinks support for some time now, but
[it may not be enabled by default](https://stackoverflow.com/a/42137273/388010).
You will notice strange `make boot` failures if it's not enabled for you.
Make sure you follow the instructions in the link to enable symlink support,
possibly as simple as through `git config core.symlinks true` or cloning with
`git clone -c core.symlinks=true <URL>`.
</details>
Install the [package dependencies](#package-dependencies):
```
$ cabal install html regex-compat
```
Then, to run the tests, execute:
make clean
make boot
make 2>&1 | tee nofib-log
```
$ make clean # or git clean -fxd, it's faster
$ # Generates input files for the benchmarks and builds compilation
$ # dependencies for make (ghc -M)
$ make boot
$ # Builds the benchmarks and runs them $NoFibRuns (default: 5) times
$ make
```
This will put the results in the file `nofib-log`. You can pass extra
options to a nofib run using the `EXTRA_HC_OPTS` variable like this:
make clean
make boot
make EXTRA_HC_OPTS="-fllvm" >&1 | tee nofib-llvm-log
```
$ make clean
$ make boot
$ make EXTRA_HC_OPTS="-fllvm"
```
To compare the results of multiple runs, use the program in
`../utils/nofib-analyse`, for example:
To compare the results of multiple runs, save the output in a logfile
and use the program in `../utils/nofib-analyse`, for example:
nofib-analyse nofib-log-6.4.2 nofib-log-6.6
```
...
$ make 2>&1 | tee nofib-log-6.4.2
...
$ make 2>&1 | tee nofib-log-6.6
$ nofib-analyse nofib-log-6.4.2 nofib-log-6.6 | less
```
to generate a comparison of the runs in captured in `nofib-log-6.4.2`
and `nofib-log-6.6`. When making comparisons, be careful to ensure
......@@ -39,6 +79,42 @@ GHC version, GCC version, C libraries, static vs. dynamic GMP library,
build options, run options, and probably lots more. To be on the safe
side, make both runs on the same unloaded machine.
## Modes
Each benchmark is runnable in three different time `mode`s:
- `fast`: 0.1-0.2s
- `norm`: 1-2s
- `slow`: 5-10s
You can control which mode to run by setting an additional `mode` variable for
`make`. The default is `mode=norm`. Example for `mode=fast`:
```
$ make clean
$ make boot mode=fast
$ make mode=fast
```
Note that the `mode`s set in `make boot` and `make` need to agree. Otherwise you
will get output errors, because `make boot` will generate input files for a
different `mode`. A more DRY way to control the `mode` would be
```
$ make clean
$ export mode=fast
$ make boot
$ make
```
As CPU architectures advance, the above running times may drift and
occasionally, all benchmarks will need adjustments.
Be aware that `nofib-analyse` will ignore the result if it falls below 0.2s.
This is the default of its `-i` option, which is of course incompatible with
`mode=fast`. In that case, you should just set `-i` as appropriate, even
deactivate it with `-i 0`.
## Configuration
There are some options you might want to tweak; search for nofib in
......@@ -50,6 +126,16 @@ To get instruction counts, memory reads/writes, and "cache misses",
you'll need to get hold of Cachegrind, which is part of
[Valgrind](http://valgrind.org).
You can then pass `-cachegrind` as `EXTRA_RUNTEST_OPTS`. Counting
instructions slows down execution by a factor of ~30. But it's
a deterministic metric, so you can combine it with `NoFibRuns=1`:
```
$ (make EXTRA_RUNTEST_OPTS="-cachegrind" NoFibRuns=1) 2>&1 | tee nofib-log
```
Optionally combine this with `mode=fast`, see [Modes](#modes).
## Extra Packages
Some benchmarks aren't run by default and require extra packages are
......@@ -59,11 +145,23 @@ installed for the GHC compiler being tested. These packages include:
## Adding benchmarks
If you add a benchmark try to set the problem sizes for
fast/normal/slow reasonably.
Runtimes for normal should be above 0.3s if that can be reasonably
achieved. Less than that and there is a chance
nofib-analyse will ignore the result if it falls below 0.2s.
fast/normal/slow reasonably. [Modes](#modes) lists the recommended brackets for
each mode.
### Stability wrt. GC paramerisations
Additionally, pay attention that your benchmarks are stable wrt. different
GC paramerisations, so that small changes in allocation don't lead to big,
unexplicable jumps in performance. See Trac #15999 for details. Also make sure
that you run the benchmark with the default GC settings, as enlarging Gen 0 or
Gen 1 heaps just amplifies the problem.
As a rule of thumb on how to ensure this: Make sure that your benchmark doesn't
just build up one big data and consume it in a final step, but rather that the
working set grows and shrinks (e.g. is approximately constant) over the whole
run of the benchmark. You can ensure this by iterating your main logic $n times
(how often depends on your program, but in the ball park of 100-1000).
You can test stability by plotting productivity curves for your `fast` settings
with the `prod.py` script attached to Trac #15999.
If in doubt, ask Sebastian Graf for help.
......@@ -428,12 +428,6 @@ Same issue with GHC.IO.Encoding.UTF8 as treejoin
Real suite
---------------------------------------
cacheprof
~~~~~~~~~
Successive runs with the same data can yield different allocation
totals, for some reason.
Reported at https://ghc.haskell.org/trac/ghc/ticket/8611
gg
~~
Same issue with GHC.IO.Encoding.UTF8 as treejoin
......
{-# LANGUAGE CPP #-}
module NofibUtils where
import Data.Char (ord)
import Data.List (foldl')
import System.Environment (getArgs)
-- | A very simple hash function so that we don't have to store and compare
-- huge output files.
hash :: String -> Int
hash = foldl' (\acc c -> ord c + acc*31) 0
-- | Using @salt xs@ on an loop-invariant @xs@ inside a loop prevents the
-- compiler from floating out the input parameter.
#ifdef __GLASGOW_HASKELL__
salt :: a -> IO a
salt = pure
{-# NOINLINE salt #-}
#else
salt :: [a] -> IO [a]
-- this won't work with real/lift, but I can't think of another way
salt xs = do
s <- length <$> getArgs
-- Invariant: There are less than 'maxBound' parameters passed to the
-- executable, otherwise this isn't really 'pure'
-- anymore.
pure (take (max (maxBound - 1) s) xs)
#endif
\ No newline at end of file
......@@ -7,6 +7,8 @@
import Data.Ratio
import System.Environment
import Control.Monad
import NofibUtils
-- powers = [[r^n | r<-[2..]] | n<-1..]
-- type signature required for compilers lacking the monomorphism restriction
......@@ -23,7 +25,7 @@ pascal:: [[Integer]]
pascal = [1,2,1] : map (\line -> zipWith (+) (line++[0]) (0:line)) pascal
bernoulli 0 = 1
bernoulli 1 = -(1%2)
bernoulli 1 = -(1%2)
bernoulli n | odd n = 0
bernoulli n =
(-1)%2
......@@ -33,8 +35,7 @@ bernoulli n =
| (k,combs)<- zip [2..n] pascal]
where powers = (neg_powers!!(n-1))
main = do
main = replicateM_ 500 $ do
[arg] <- getArgs
let n = (read arg)::Int
putStr $ "Bernoulli of " ++ (show n) ++ " is "
print (bernoulli n)
print (hash (show (bernoulli n)))
......@@ -5,9 +5,9 @@ include $(TOP)/mk/boilerplate.mk
# we don't want to include paraffins.c
SRCS=Main.hs
FAST_OPTS = 500
NORM_OPTS = 1200
SLOW_OPTS = 1200
FAST_OPTS = 60
NORM_OPTS = 180
SLOW_OPTS = 320
include $(TOP)/mk/target.mk
../../common/NofibUtils.hs
\ No newline at end of file
Bernoulli of 500 is (-16596380640568557229852123088077134206658664302806671892352650993155331641220960084014956088135770921465025323942809207851857992860213463783252745409096420932509953165466735675485979034817619983727209844291081908145597829674980159889976244240633746601120703300698329029710482600069717866917229113749797632930033559794717838407415772796504419464932337498642714226081743688706971990010734262076881238322867559275748219588404488023034528296023051638858467185173202483888794342720837413737644410765563213220043477396887812891242952336301344808165757942109887803692579439427973561487863524556256869403384306433922049078300720480361757680714198044230522015775475287075315668886299978958150756677417180004362981454396613646612327019784141740499835461) % 8365830
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
4837159772545863515
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
7854290180820048573
Bernoulli of 1200 is (-817283084907145111572399996796188186929948021171540635261702738551708111477702215521228614331934177097923932805704741877505315802099968644526923516831279629598808324483500152366458832081685317627237457631184752228020937570564254815882158305151302610199775789475165896446641596716277144097068737158145914138007078189232654452799125693796738978666141474572034951880049651276395258871736325031347278370751179112761098769648358184727719342195788517539042280312285503783317435767094772232188053832388556642971835257520841265556214518816887839317032756221651943099049943364078453046936556210226401672791424597231796910017302629622696813265414512846119459300648681522146826529719016531806862741126219273760900853654441200486609296441953907892179806096295493246096984193080919149475873154316697140961129301056531238774105902553097012500943368517979744922495110797729125277468841826780050573035174078049894629090206487768669888397451259970944341623362677477653024126280346797844898470774121915316087294309624558249263982077427309405848954032887670597024127853854053863101860744673817779233498065391358849151573236055043756596256765512898529624186525745647423833203492864408172918274220368064050268165386592076467519169108291998974562165780109655956163459370589797972659772102789228116001807018269700054669095401942407416366577517743712792893123263496888764252691912907256690059391501971681479057907563322214907522789738165164383590985187599722977665371684506905283120919288745868687850127677657732893365572116745162008104587855199249070829739803362683992055697988644557275081028767693452226101566312965265128113514859335607832326203448726729640979171828670950801951244855700251656696003668194895102278126290607925136142303094597971821276434274327369277030048595161456791992895045128523723566610941535184732307135369906011030556967118095937167514357218562889874618196941789991096385562335659565306542263831265064929677494773149851892197811967290338068875654631788048990868861878732183686740539647737128695224051703703609653147846199152309516725733395268923689546224793417101495035853409632416061296425464525649350834817897763332683838895024611803105183912115005657422506864991905658383153758107637611286988804559019826656034916431916119212601265690187857) % 42107247672297314156359710
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774
-1984793735833138774