42
submitted 1 day ago* (last edited 1 day ago) by CombatWombatEsq@lemmy.world to c/programming@programming.dev

I know JavaScript is a very special boi but c’mon, you’re embarrassing me in front of the wizards.

top 17 comments
sorted by: hot top controversial new old
[-] melfie@lemy.lol 6 points 2 hours ago* (last edited 2 hours ago)

So a Reduced Instruction Set Computer with a superfluous instruction that even x86_64 doesn’t have? 🤔

[-] bitcrafter@programming.dev 19 points 1 day ago

If only we had built the web on top of a language that did not have such insane handling of its numbers in the first place...

[-] arty@feddit.org 1 points 5 hours ago

Could you recommend a language with a sane handling of 64b-NaN-to-32b-int conversion?

[-] bitcrafter@programming.dev 6 points 4 hours ago

There are tons of languages that let you represent integers directly as integers rather than having everything be a float so that you do not have to worry about this problem at all.

[-] arty@feddit.org 1 points 4 hours ago

So by insanity you mean having just one number type?

[-] BatmanAoD@programming.dev 4 points 2 hours ago

Yes. Types are good. Numeric operations have specific hardware behavior that depends on whether you're using floating-point or not. Having exclusively floating-point semantics is wildly wrong for a programming language.

[-] bitcrafter@programming.dev 3 points 2 hours ago

The whole reason why an entire instruction was added to ARM to facilitate conversion to integers is because people need integer semantics from their numbers and so the language has to support this efficiently. Thus, in practice there already two number types, it's just that they have been merged together in this incredibly messy way so that you have the worst of both worlds.

[-] FizzyOrange@programming.dev 4 points 3 hours ago

Yeah. I think the smallest number of number types you can reasonably have is two - f64 and arbitrary precision integers types. One of the few good decisions Python made.

[-] arty@feddit.org 0 points 3 hours ago

Well, I think I’m happy to never have to choose a number type in JS. I also think that insanity is how C and Intel handle NaN conversions.

[-] FizzyOrange@programming.dev 3 points 3 hours ago

Try interacting with anything that uses u64 and you'll be a lot less happy!

Anyway JavaScript does have BigInt so technically you are choosing.

that insanity is how C and Intel handle NaN conversions.

It's not actually quite as bad as the article says. While it's UB for C, and it can return garbage. The actual x86 conversion instruction will never return garbage. Unfortunately the value it returns is 0x8000... whereas JS apparently wants 0. And it sets a floating point exception flag, so you still need extra instructions to handle it. Probably not many though.

Also in practice on a modern JS engine it won't actually need to do this operation very often anyway.

[-] arty@feddit.org 0 points 3 hours ago

Try interacting with anything that uses u64 and you’ll be a lot less happy!

I’m sorry you had to experience this, but in all my years of development I hadn’t.

…not actually quite as bad… While it’s UB for C, and it can return garbage. … the value it returns is 0x8000

0x8000 is garbage. Insane.

[-] bitcrafter@programming.dev 3 points 3 hours ago

What does it mean to access the element at index π of an array?

[-] arty@feddit.org -1 points 3 hours ago

What does it mean to access the 0th element of an array?

[-] bitcrafter@programming.dev 3 points 2 hours ago

It is the 0-th element after the start of the array. 0-based indexing is very common in both mathematics and computer science.

[-] arty@feddit.org 4 points 1 day ago

I wonder how it is with nan etc in other languages

[-] CombatWombatEsq@lemmy.world 2 points 1 day ago

I’d definitely read a blog post about this, so if you decide to look into it you should write something up and post it. Maybe it’s standards based?

[-] arty@feddit.org 3 points 5 hours ago

I don’t think I’ll dive deeper than quoting Wikipedia:

Most fixed-size integer formats cannot explicitly indicate invalid data. In such a case, when converting NaN to an integer type, the IEEE 754 standard requires that the invalid-operation exception be signaled.

For example in Java, such operations throw instances of java.lang.ArithmeticException.

In C, they lead to undefined behavior, but if annex F is supported, the operation yields an "invalid" floating-point exception (as required by the IEEE standard) and an unspecified value.

In the R language, the minimal signed value (i.e. 0x80000000) of integers is reserved for NA (Not available).[citation needed] Conversions from NaN (or double NA) to integers then yield a NA integer.

Perl's Math::BigInt package uses "NaN" for the result of strings that do not represent valid integers.

this post was submitted on 14 Jan 2026
42 points (97.7% liked)

Programming

24410 readers
379 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS