this post was submitted on 26 Feb 2024
748 points (95.7% liked)

Programmer Humor

19817 readers
878 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 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 22 points 10 months ago (5 children)

As a programmer who grew up without a FPU (Archimedes/Acorn), I have never liked float. But I thought this war had been lost a long time ago. Floats are everywhere. I've not done graphics for a bit, but I never saw a graphics card that took any form of fixed point. All geometry you load in is in floats. The shaders all work in floats.

Briefly ARM MCU work was non-float, but loads of those have float support now.

I mean you can tell good low level programmers because of how they feel about floats. But the battle does seam lost. There is lots of bit of technology that has taken turns I don't like. Sometimes the market/bazaar has spoken and it's wrong, but you still have to grudgingly go with it or everything is too difficult.

[–] AnUnusualRelic 10 points 10 months ago

But if you throw an FPU in water, does it not sink?

It's all lies.

[–] [email protected] 9 points 10 months ago (1 children)

all work in floats

We even have float16 / float8 now for low-accuracy hi-throughput work.

[–] [email protected] 6 points 10 months ago* (last edited 10 months ago) (1 children)

Even float4. You get +/- 0, 0.5, 1, 1.5, 2, 3, Inf, and two values for NaN.

Come to think of it, the idea of -NaN tickles me a bit. "It's not a number, but it's a negative not a number".

[–] [email protected] 6 points 10 months ago* (last edited 10 months ago) (1 children)

I think you got that wrong, you got +Inf, -Inf and two NaNs, but they're both just NaN. As you wrote signed NaN makes no sense, though technically speaking they still have a sign bit.

[–] [email protected] 5 points 10 months ago

Right, there's no -NaN. There are two different values of NaN. Which is why I tried to separate that clause, but maybe it wasn't clear enough.

[–] [email protected] 3 points 10 months ago (1 children)

IMO, floats model real observations.

And since there is no precision in nature, there shouldn't be precision in floats either.

So their odd behavior is actually entirely justified. This is why I can accept them.

[–] [email protected] 2 points 10 months ago (1 children)

I just gave up fighting. There is no system that is going to both fast and infinitely precision.

So long ago I worked in a game middleware company. One of the most common problems was skinning in local space vs global space. We kept having customers try and have global skinning and massive worlds, then upset by geometry distortion when miles away from the origin.

[–] [email protected] 1 points 9 months ago (1 children)

How do y'all solve that, out of curiosity?

I'm a hobbyist game dev and when I was playing with large map generation I ended up breaking the world into a hierarchy of map sections. Tiles in a chunk were locally mapped using floats within comfortable boundaries. But when addressing portions of the map, my global coordinates included the chunk coords as an extra pair.

So an object's location in the 2D world map might be ((122, 45), (12.522, 66.992)), where the first elements are the map chunk location and the last two are the precise "offset" coordinates within that chunk.

It wasn't the most elegant to work with, but I was still able to generate an essentially limitless map without floating point errors poking holes in my tiling.

I've always been curious how that gets done in real game dev though. if you don't mind sharing, I'd love to learn!

[–] [email protected] 2 points 9 months ago

That's pretty neat. Game streaming isn't that different. It basically loads the adjacent scene blocks ready for you to wonder in that direction. Some load in LOD (Level Of Detail) versions of the scene blocks so you can see into the distance. The further away, the lower the LOD of course. Also, you shouldn't really keep the same origin, or you will hit the distort geometry issue. Have the origin as the centre of tha current block.

[–] calcopiritus 2 points 10 months ago (1 children)

I'd have to boulder check, but I think old handheld consoles like the Gameboy or the DS use fixed-point.

[–] [email protected] 1 points 10 months ago

I'm pretty sure they do, but the key word there is "old".

[–] ZILtoid1991 1 points 9 months ago (1 children)

Floats make a lot of math way simpler, especially for audio, but then you run into the occasional NaN error.

[–] [email protected] 1 points 9 months ago

On the PS3 cell processor vector units, any NaN meant zero. Makes life easier if there is errors in the data.