Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Nvidia announces native GPU programming in Rust(nvidia.com ↗)
    92comments
  2. Training a 4B model to produce 81% faster query plans than Postgres(rohanbansal.com ↗)
    84comments
  3. Breaking the 1.58-bit Barrier for Ternary LLMs(arxiv.org ↗)
    16comments
  4. Xiaomi Mimo 2.6 live post-training dashboard(xiaomi.com ↗)
    63comments
  5. Backups Aren't Simple(filipovski.net ↗)
    29comments
  6. Small programming tricks(will-keleher.com ↗)
    181comments
  7. The engineering behind the US Strategic Petroleum Reserve(johnjwang.com ↗)
    28comments
  8. OpenSpec – A lightweight and configurable AI spec framework(openspec.dev ↗)
    17comments
  9. Reversing Factorio's RNG(gegell.github.io ↗)
    17comments
  10. HarnessTax: How Much Does the Harness Matter for Coding Agents?(harnesstax.github.io ↗)
    4comments
  11. Performance Improvements in .NET 11(devblogs.microsoft.com/dotnet ↗)
    32comments
  12. AWS says it can't restore some data from mideast facilities struck by Iran(wsj.com ↗)
    196comments
  13. Australia says it could follow Canada in forging deeper ties with EU(independent.co.uk ↗)
    72comments
  14. Reverse-engineered Jev-like model(github.com/vinnylarouge ↗)
    9comments
  15. Japan's book scene is moving from bookstores to libraries(untranslatedjp.substack.com ↗)
    39comments
  16. Show HN: An e-ink frame that hears birds and draws them as 1800s illustrations(github.com/arnegiacomo ↗)
    239comments
  17. How good are frontier models at physics?(arxiv.org ↗)
    38comments
  18. Why Does the Universe Expand?(cosmicave.org ↗)
    11comments
  19. OpenAI Discloses Six New Incidents of ‘Concerning’ A.I. Behavior(nytimes.com ↗)
    6comments
  20. Anecdotally, programmers dislike "reduce"(evanhahn.com ↗)
    152comments
  21. I replaced my brown-noise browser tab with a menu bar app(oldmanrahul.com ↗)
    7comments
  22. Developing provably correct Rust code with Verus(amazon.science ↗)
    discuss
  23. Anatomy of a Texture(agentlien.github.io ↗)
    14comments
  24. Dream-RSI: Recursive Self-Improvement through Evolving Worlds(arxiv.org ↗)
    49comments
  25. Accurate Models of AMD Matrix Cores(arxiv.org ↗)
    7comments
  26. Destroy After Reading: photocopiers,cheap paper and DIY gave metal it's look(truegrittexturesupply.com ↗)
    3comments
  27. Hackers Got Inside a Flock Camera(wired.com ↗)
    217comments
  28. Training Text-to-Image Models 3.6× Faster(linum.ai ↗)
    7comments
  29. The DeepMind Institute(deepmind.com ↗)
    43comments
  30. Tell the speakers that you liked their talks(ohhelloana.blog ↗)
    75comments

How big are factorials?

82 pointsby 1d agoeli.thegreenplace.net
39 comments
1d agoHN ↗

Factorial (n) for n > 24 is greater than 10^n.

6h agoHN ↗

24! is approximately Avogadro's number (about a 3% difference).

3h agoHN ↗

inverse Gamma function of Avogadro's number (6.02 × 10²³) is ~ 24.99056

2h agoHN ↗

Sure, but "23.99067408! is Avogadro's number" is both harder to remember and less cool than "24! is almost Avogadro's number".

1h agoHN ↗

Sure. I wasn't disagreeing with you; just curious how close the coincidence was.

10h agoHN ↗

Reminds me of: Professor asked us to find the biggest factorial using C programming language. And then using LISP. You can imagine our surprise.

9h agoHN ↗

There is a algorithm call Prime Swing Factorial that can compute large factorials exactly in arbitrary precision math using prime factorization. Like 10000000! in under second depending of how optimized the math library it. Probably like 100x faster than the normal method.

9h agoHN ↗

Worth noting for anyone reaching for this in practice rather than out of curiosity: several standard library implementations (Python's math.factorial is one) already use a divide-and-conquer multiplication scheme instead of naive sequential multiplication for exactly this reason, so you often get most of that speedup for free without implementing prime swing yourself.

3h agoHN ↗

(I just undead'ed this comment; can't see why it was downvoted.)

7h agoHN ↗

With Lisp you can use iterative algos and get that under a second too. SBCL can be ridiculously fast; and if you optimize the compilation for integers... the speed gets really close to your solution.

3h agoHN ↗

I think you mean "using base C without any arbitrary-precision library (e.g. GMP)" . All that illustrates is that Lisp has built-in support for arbitrary-precision arithmetic, whereas C doesn't. Otherwise, how is this surprising, and what is the reason for the performance difference?

10h agoHN ↗

Stirling's approximation is also used a lot in statistical mechanics, because you often have to calculate logs of state space sizes, which means lots of combinatorics and thus lots of factorials. Plus it's continuous so you can do calculus.

10h agoHN ↗

The author's casual mention of 52! at the opening of the article triggered an OLD webpage that I saw many years ago

https://czep.net/weblog/52cards.html

Anyone know how to determine the age of this page (it's got be at least 20yrs old)

9h agoHN ↗

The main.css file it imports dates itself to March 9 of 2005, and is housed in an "ancient history" section of the website that covers everything before October 26, 2010, so: "sometime between those two years" =P

9h agoHN ↗

Its first appearance on the WayBack Machine is October 13, 2009, which narrows the range somewhat.

9h agoHN ↗

52 cards is the first thing I think of when I think factorials. It's such a great and relatable way to convey the subject to people, plus it usually ends up blowing their minds like it did mine when I first learned of it. Not from this page, but from a YT vid many moons ago.

9h agoHN ↗

It was made during the brief XHTML craze. (And it's also invalid XHTML)

4h agoHN ↗

I still kind of have a soft spot for XHTML, semantic web and progressive enhancement.

5h agoHN ↗

To me it feels like a smuggled exponentation. If I take half of 52 and raise it to itself and add a base unit to it like grams or meters, that's an incomprehensibly large amount.

9h agoHN ↗

A quick and dirty approximation of the number of digits in n! is n lg n, which approximates n! from above, via the inequality

  1 * 2 * … * n ≤ n * … * n.

(This approximation should be familiar to many from an algorithmics class.)

For a tighter bound, use n lg n - n/2, or a better approximation of ln 10 in place of 1/2 if you wish. This comes from Stirling's approximation which notes that

  ln n! = n ln n - n + O(ln n).
9h agoHN ↗

(This approximation should be familiar to many from an algorithmics class.)

You need both sides though :)

What makes it interesting for estimating algorithmic complexity is that \log{n!} \in \Theta(n \log n). One side is obvious as you note, the other less so, but there's a famous trick to do both at once:

\log{n!} = \log{\prod_{h=0}^{n} h} = \sum_{h=0}^{n} \log{h}

Therefore,

\int_0^n \log{x} dx \le \log{n!} \le \int_0^n \log{x+1} dx

with both integrals trivial by parts.

9h agoHN ↗

lg(n!) grows roughly as (n lg n). Constants matter, of course, but to that's the rough estimate.

As an aside, if you take numbers from 0 to (n-1) in an array, there are n! configurations, so representing each configuration or differentiating each configuration take n lg n bits. So, in some sense, taking a mapping that's able to differentiate the input state to map to the ordered state takes at least O(n lg n) time, the standard runtime of a basic sorting algorithm.

Any additional assumptions (n larger than maximum element, distribution of elements) helps reduce this.

5h agoHN ↗

My kids love taking about big numbers. TREE(3) is a family favorite. So, I was going over sequences with them, and I decided to go slow instead. My sequence was: 1 1 1 1 ... 1 ...

They accused me of using just "all 1s" (which is, naturally, cheating). Ai contraire!

The count of the number of digits in the decimal representation of the number of unique primes in the prime factorization of the natural numbers.

The best part is that even pretty young kids can compute this sequence; by the first "2" is at 2*3*5*7*11*13*17*19*23*29!

(Hopefully I got that right; the phone doesn't make it easy to type!)

7h agoHN ↗

I did factorials even under KLISP 23 with cons cells as fake integers:

https://t3x.org/klisp/22/index.html

Dog slow but the old n270 netbook (32 bit) handles big factorials >20 fine, and OFC it's instant under Common Lisp (SBCL) and Scheme (both S9 and Chicken).

7h agoHN ↗

This brings to mind the analysis in Bender & Orszag; they approach this through difference equations (a bit of a lost art in formal mathematics; very 19th-century feel) rather than integration.

Instead of introducing the gamma function, they instead start from the observation that log(F_n) - log(F_n-1) = log(n), so treating this difference as analogous to integration, it says that F_n ~= nlogn + n as the leading asymptotic behavior. This is clear just by substitution and algebra; no calculus necessary (though it helps to "know the answer beforehand").

From there you can treat the error term in this as F_n = n^n * e^n * E_n and plug that into the same relationship (F_n = n * F_n-1) to derive what that error term looks like asymptotically, and end up in the same place that the integration on the OP leads to.

6h agoHN ↗

What's surprising (to many) is that

n! < exp(n log n)

5h agoHN ↗

What's surprising (to many) is that

n! < exp(n log n)

Why would that be surprising? I can see that many wouldn’t know whether it’s true, but

  exp(n × log n) =
  exp(log(n) × n) =
  exp(log(n))^n =
  n^n

and it’s not surprising that

    1 × 2 × 3 × 4 × … × n
  < n × n × n × n × … × n

for n > 1

5h agoHN ↗

I don't know why that is surprising, but I'm teaching computer science at a university, and students seem surprised every time it comes up.

6h agoHN ↗

My favorite one is with the 52! seconds:

Start a timer that will count down the number of seconds from 52! to 0. Then walk around the Earth’s equator with one step every billion years. Then, after you make your way around the earth equator (by taking 1 step every billion of years), you take one drop of water out of the Pacific Ocean. Then, you repeat the process of walking around the equator, and everytime you walk around, you keep draining one singular drop of water. After the ocean is fully drained, you refill the ocean and put a piece of paper underneath you. Now, you once again repeat this process of walking, draining, and placing papers. After your stack of papers has reached the Sun, you repeat another 1000 times.

After all this, you have completed just about a third of the timer.

https://sites.imsa.edu/hadron/2025/02/26/how-big-is-52/

5h agoHN ↗

For another perspective, 52! is roughly the number of atoms in a galaxy. Galaxies are really quite large!

4h agoHN ↗

There are more way to rearrange a deck of cards than there are stars in the universe

4h agoHN ↗

60! is more than the number of atoms in the observable universe. This is why wedding seating plans are hard. ;0)

1h agoHN ↗

Stirling’s approximation is mentioned in the article.

47m agoHN ↗

I know that, that was my point. I'm saying I don't see much point in restating it without adding something; it's been known for 300 years.