714
all 41 comments
sorted by: hot top controversial new old
[-] gravitas_deficiency@sh.itjust.works 46 points 2 days ago* (last edited 2 days ago)

Look at what they need to mimic a fraction inaccurately.

The fundamental mathematical nature of how binary floating point values are stored means that extremely straightforward and rational (in the mathematical sense of the term) base-10 arithmetic can surprisingly often yield results that are irrational (again, mathematically) in binary - hence why you’ll sometimes see a result of 3.000000000101325 or something like that in places where you’d expect the result to be simply 3.0

[-] jjjalljs@ttrpg.network 27 points 2 days ago

Yep. Open your browser's console and do .1 + .2 and you get 0.30000000000000004.

One of the reasons not to use floating point when working with money.

[-] bamboo 12 points 2 days ago

What's the right way to do money math without floats?

[-] orhtej2@eviltoast.org 35 points 2 days ago
[-] felbane@lemmy.world 14 points 2 days ago

Also known as "if you ain't storing cents, you ain't making sense."

[-] KoalaUnknown@lemmy.world 11 points 2 days ago* (last edited 2 days ago)

There is also Decimal floating-point arithmetic which has a larger range and better memory safety. Java, C#, Python, Ruby, etc. have built in support for it via Decimal.

[-] Cevilia 4 points 2 days ago

Banks and big companies have to worry about round-off and fractions of a penny, so Decimal is a better solution for them. But the great unwashed like you and me will never have to worry about that, so either works.

[-] SmoothLiquidation@lemmy.world 12 points 2 days ago

As other people mentioned, things like the decimal structure works well, but you can also just use an int to store how many pennies something costs and convert it to dollars for display.

[-] jjjalljs@ttrpg.network 10 points 2 days ago

Use a dedicated data type or library. Some languages also have something like python's Decimal type

>>> .1 + .2
0.30000000000000004
>>> Decimal(".1") + Decimal(".2")
Decimal('0.3')
[-] JakenVeina@midwest.social 6 points 2 days ago* (last edited 2 days ago)

The same IEEE spec that introduced base-2 floating point models was updated in 2008 to include some base-10 models that eliminate these issues. Many languages already support them natively, as well as most database engines. Otherwise, you can probably find third-party-library support.

If you don't have access to an IEEE decimal implementation, or if you just wanna be a rulebreaker, the common strategy is to just store only plain integers, and the precision level you want. So, say, if you're just dealing with simple american dollars, you'd just make sure to always interpret the integer value as "cents". If you need more precision than that, you might do "millicents".

[-] CanadaPlus@lemmy.sdf.org 7 points 2 days ago* (last edited 2 days ago)

It'd be more correct to say round or unround.

Irrational specifically means infinite non-repeating decimal values, or equivalently that a number can't be represented as any fraction. This is independent of number system.

Sometimes "more irrational" is used as a way of saying further from any small-integer fraction by some measure, but that doesn't really work here.

[-] juliebean@lemmy.zip 5 points 2 days ago

i see what you're trying to say, but that's not what rational and irrational means (mathematically).

[-] 5765313496@lemmy.world 1 points 2 days ago

Look what they need to mimic a fraction of a fraction.

[-] deaf_fish@midwest.social 6 points 2 days ago

I think you could argue that they're actually trying to mimic real numbers.

[-] Grandwolf319@sh.itjust.works 16 points 2 days ago* (last edited 2 days ago)

Cause fractions can be figured out in context. You can store the numerators and have the denominator as a constant in the code.

[-] frezik 10 points 2 days ago

You can also have a type which does it. Raku has a Rational type for this.

[-] Kacarott@aussie.zone 3 points 2 days ago

Python has the Fraction type, and there are many more

[-] dontsayaword@piefed.social 4 points 2 days ago

Part of my first programming courses in the 90s in C were creating a native fraction type.

[-] SpaceNoodle@lemmy.world 13 points 2 days ago
[-] orhtej2@eviltoast.org 28 points 2 days ago
[-] wheezy@lemmy.ml 4 points 2 days ago* (last edited 2 days ago)

You like math jokes and guys with fast cars? Well, you're in luck because I drive a bmw √-64

Edit: I know nothing about cars. Don't judge me.

[-] Ephera@lemmy.ml 3 points 2 days ago

I do enjoy how many number sets are referred to as "normal numbers":

[-] irelephant@lemmy.dbzer0.com 3 points 2 days ago

Eviltoasts pict-rs is being silly again

[-] hexagonwin@lemmy.sdf.org 8 points 2 days ago

unrelated but the image shows so low res (86x96) that it's unreadable, is this different for everyone else?

what mine shows - https://eviltoast.org/pictrs/image/44915c44-8836-4961-bd06-a45bba04408a.jpeg

[-] orhtej2@eviltoast.org 9 points 2 days ago

The link you gave shows hires for me. Can you try loading in incognito?

just pict-rs things I guess 🤷

[-] hexagonwin@lemmy.sdf.org 5 points 2 days ago

hmm very weird. i also tried wget and it grabs the same 86x96 file. https://termbin.com/gvg9

[-] wheezy@lemmy.ml 1 points 2 days ago* (last edited 2 days ago)

Weird. My wget gives full resolution. No redirect options or anything. Only difference is the IP resolve for you is in Korea and mine is in the US. Likely just closest server resolve.

Try curl with -L set?

Or I'd be curious if something like gallery-dl resolves the image in finding the higher resolution and what the difference is if it does.

Maybe it's a DNS issue if not a redirect issue.

My guess is DNS. Try with another provider?

[-] hexagonwin@lemmy.sdf.org 2 points 2 days ago

You're right! 1.1.1.1 (Cloudflare) or my ISP's DNS seems to be weird. Works correctly with 9.9.9.9 (Quad9).

[-] wheezy@lemmy.ml 1 points 2 days ago
[-] marcos@lemmy.world 8 points 2 days ago

It's not "mimicking" a fraction. It is a fraction.

It's also the most compact fraction representation around.

[-] WhiskyTangoFoxtrot@lemmy.world 20 points 2 days ago

Show how 1/3 can be precisely represented in floating point.

[-] BigMikeInAustin@lemmy.world 35 points 2 days ago* (last edited 2 days ago)

fl_numerator = 1

fl_denominator = 3

And division is a "stretch goal" once we get funding.

[-] Gork@sopuli.xyz 3 points 2 days ago

How many decimal places can it be stretched?

[-] MyBrainHurts@piefed.ca 2 points 2 days ago

As usual, the best jokes are in the comments. (Though goddamn I chuckled at the meme.)

[-] marcos@lemmy.world 1 points 2 days ago

Do you have a computer type that can represent the entire rational set?

[-] anton 1 points 2 days ago

Do you have a computer type that can represent the entire rational set?

Aside from the fact that there are infinitely many rationals but only finite sized computer you can just represent them as a ratio:

struct Rational {
    numerator: BigInt,
    denominator: BigInt,
}

The real fun are the rationals, as they contain uncomputable numbers. The computable rationals can be represented as:

struct Rational {
    exponent: BigInt,
    digits: fn(BigInt)->Byte,
}
[-] WhiskyTangoFoxtrot@lemmy.world 3 points 2 days ago

No. They all need to mimic certain numbers.

[-] aaaaaaaaargh@feddit.org 3 points 2 days ago

Agreed, but in terms of efficiency wouldn't it make more sense to put the sign bit right before the mantissa in order to keep the memory layout more consistent with powers of two?

[-] anton 13 points 2 days ago

Having the sign bit in front, makes them compare like sign-bit-integers and if they are compared/sorted like 2s-complement integers, the negatives are reversed but still come after the positives.

[-] markz@suppo.fi 8 points 2 days ago* (last edited 2 days ago)

I doubt the layout is relevant there as the FPU should be just physically wired to handle it.

this post was submitted on 09 Oct 2025
714 points (100.0% liked)

Programmer Humor

26827 readers
875 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