273
all 43 comments
sorted by: hot top new old
[-] b3nsn0w@lemmy.world 17 points 3 hours ago

duh, it's part of the IEEE 754 standard. every language that handles floating point numbers has NaN handling, and in every language NaN is a float. the only reason this is brought up as a javascript thing all the time is that js doesn't have separate float and int types (aside from special structures like typed arrays and dataviews), it just defaults to float64 for simplicity and calls it number, which lines up with the "NaN is a number? nani???" joke.

you don't like it? consult the sorry excuse of thinking sand in the device you're reading this on, because this is etched straight into it. every FPU capable of handling float32 and float64 numbers knows what NaN is and handles it the exact same way.

this is one of the many things that sound unintuitive about programming but if you bother to understand the context you realise that if it wasn't this way, it would be way worse. one of the most important skills in our field is to understand computers for what they are, rather than be puzzled that they aren't what you thought they were, and it especially comes out in edge cases like this.

[-] aksdb@lemmy.world 9 points 3 hours ago* (last edited 2 hours ago)

To add to this: the state of being not a number is only relevant to a number. Everything that’s already not a number doesn’t need a specific value to represent this state. It’s actually quite logical.

Apparently one of the few examples of JS not being weird.

[-] dylanTheDeveloper@lemmy.world 2 points 3 hours ago

Technically everything is a number when you get low enough

[-] Lemminary@lemmy.world 1 points 2 hours ago

Bro I'm too high for this

[-] thethunderwolf@lemmy.dbzer0.com 5 points 5 hours ago

this makes sense

NaN is a "this was meant to be a number but it somehow isnt"

[-] Jankatarch@lemmy.world 33 points 11 hours ago* (last edited 11 hours ago)

> "Not a Number"
> Look inside.
> number

[-] TrickDacy@lemmy.world 9 points 10 hours ago

JavaScript really isn't as bad as people want it to be

[-] kunaltyagi@programming.dev 1 points 4 hours ago

Unfortunately. That's why it is still so prevalent

[-] aksdb@lemmy.world 1 points 2 hours ago

That it’s so prevalent could also mean it’s worse than many people realize.

[-] bss03@infosec.pub 44 points 14 hours ago
[-] lena@gregtech.eu 14 points 13 hours ago

I love that talk.

And yes, this post is low-effort, but so are most posts on here. Just a bunch of screenshots from various microblogging platforms reposted from Reddit.

[-] Aedis@lemmy.world 5 points 13 hours ago

Came in here to make sure this is posted.

[-] ThunderComplex@lemmy.today 57 points 15 hours ago

I think this, and the fact that NaN == NaN is false, make perfect sense.
NaN is the result of mathematically undefined behavior. You’re not going to get a NaN outside of a number context, so tying it together in the Number scope is fine.

[-] VAK@lemmy.world -2 points 5 hours ago

It feels silly that a high level language has NaN at all

[-] LillyPip@lemmy.ca 6 points 13 hours ago

Same reason NULL != NULL. It makes sense if you understand how these values work.

[-] SpaceNoodle@lemmy.world 13 points 12 hours ago
[-] LillyPip@lemmy.ca 8 points 12 hours ago* (last edited 12 hours ago)

https://richiban.uk/2016/12/21/does-null-equal-null/

ISNULL may be true, whilst NULL != NULL. NULL is not a value.

[-] SpaceNoodle@lemmy.world 14 points 12 hours ago

Ah, my brain was in C mode, where NULL is functionally 0. This is about the concept, which doesn't apply equally to all languages.

[-] LillyPip@lemmy.ca 6 points 12 hours ago* (last edited 10 hours ago)

Yep. There are some languages where this applies, because it’s a mathematical concept. The point is it’s the same ‘no value’ concept, which isn’t ~~shared by~~ implemented the same way by all languages.

C is strongly typed, and uses pointers, so NULL sort of intrinsically has a value in C.

edit: my wording was a bit off

[-] djmikeale@feddit.dk 6 points 12 hours ago* (last edited 12 hours ago)

You can kinda think of it as null meaning undefined. In this case, "undefined does not equal undefined" seems easier for me to wrap my head around

[-] threeonefour@piefed.ca -3 points 15 hours ago

The result of mathematically undefined behaviour should be an error, but sure, go ahead and return Keleven. 1/0 = keleven fuck it.

[-] bss03@infosec.pub 28 points 14 hours ago

NaN is one of the ways IEEE maths signals an erroneous calculation when the only outbound communication channel is the returned IEEE value. Reading the history and rationale of the floating-point standard will likely convince you this was and probably is a good compromise.

Because IEEE values often have hardware acceleration that is a significant factor in performance, languages rarely (if ever) choose to map all IEEE error values to language-specific error reporting (e.g. a thrown exception or error-tracking algebraic data type).

JS is hardly an outlier here.

I do think it probably violates the principle of least surprise, but I don't think I understand the scale of "momentum" change that would need to take place across society (industry, academia, etc.) to align it with naive expectations.

[-] ThunderComplex@lemmy.today 15 points 15 hours ago

NaN is a error and it’s your responsibility to handle it gracefully. No need to halt the entire program when you fuck up some maths.

[-] threeonefour@piefed.ca 11 points 15 hours ago

NaN is a error

Error.isError(NaN)
// False
[-] lime@feddit.nu 13 points 14 hours ago* (last edited 14 hours ago)

nan is a ieee754-defined error. what javascript calls errors these days (it tends to change a lot) has little to nothing to do with that. it's on every developer to familiarise themself with ieee754, it's one of the most important documents in the profession.

while nan is an invalid floating-point number, it is a valid value for a float-typed field. making it into an error is like adding a bit labelled "crash" to every number in your program.

[-] Lupie@sopuli.xyz 5 points 14 hours ago* (last edited 14 hours ago)

No, it should not be an error. If you're making a calculator and your user enters 1/0, your program should not have the propensity to crash; the result should simply be NaN and you should choose how you display that result to your user.

[-] daychilde@lemmy.world 4 points 10 hours ago
[-] bss03@infosec.pub 2 points 7 hours ago

fault v. error v. failure

In common language they can be synonyms, but often aren't in places (like computing) where there's a useful difference. A page fault isn't an error; a handled error doesn't result in a failure; fault-tolerant systems fail less often than their components fault.

[-] treadful@lemmy.zip 5 points 13 hours ago

You talk like error handling isn't a thing.

[-] anewfox@lemmy.zip 3 points 13 hours ago* (last edited 13 hours ago)

fun fact: getting NaN from a numeric calculation is the error that you handle. if this wasn't obvious, please don't write code for anyone but yourself. hope this helps.

[-] daychilde@lemmy.world 5 points 10 hours ago

if this wasn’t obvious,

If this wasn't obvious, be glad of the chance to learn.

If we all stopped as soon as something simple wasn't obvious, nobody would learn and nobody would do anything.

What a terrible reply to someone. It cuts off curiosity and says "You are too stupid to do anything."

Yet I bet there was a time that even with that very specific thing, you didn't think of it that way.

[-] treadful@lemmy.zip -2 points 12 hours ago

NaN is a primitive value, not an Error.

>> typeof 1 / "a"
"number" 
[-] lemonsorrel@lemmy.world 0 points 12 hours ago

newcomers to shitting on javascript sometimes learn to blame the tool

[-] Colloidal@programming.dev 15 points 12 hours ago

It's clearly bread.

[-] Quetzalcutlass@lemmy.world 39 points 15 hours ago* (last edited 15 hours ago)

It's of type Numbn't.

[-] palordrolap@fedia.io 16 points 14 hours ago

Infinity is also a number in JavaScript / IEEE number formats, but you'll get a lot of grumbling from mathematicians with that sort of assertion.

[-] anton@lemmy.blahaj.zone 1 points 2 minutes ago

Once you accept that each float represent a range of reals most design decisions make sense.
Infinity is just the name given to values that are too large to represent otherwise and negative zero includes negative values too close to zero.

What mathematics probably hate most about floats is that rounding breaks commutativity.

[-] PattyMcB@lemmy.world 1 points 5 hours ago

NaN indeed!

[-] bigmclargehuge@lemmy.zip 15 points 15 hours ago

The way I think about it: number is a js type. A floating point double, in other languages.

NaN is a state that a number type can be in, representing a situation where the outcome of the numeric operation cannot be determined.

Anywho, also yea ….JavaScript is goofy

[-] SrMono@feddit.org 3 points 15 hours ago
this post was submitted on 14 Nov 2026
273 points (98.2% liked)

Programmer Humor

34135 readers
1937 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 3 years ago
MODERATORS