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
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.
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.
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".
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.
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.
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?
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.
44 Comments
gravitas_deficiency@sh.itjust.works · 49 pts · 305d
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 pts · 305d
Yep. Open your browser's console and do
.1 + .2and you get0.30000000000000004.One of the reasons not to use floating point when working with money.
bamboo@lemmy.blahaj.zone · 12 pts · 305d
What's the right way to do money math without floats?
orhtej2@eviltoast.org · 37 pts · 305d
Fixed-point arithmetics
felbane@lemmy.world · 14 pts · 305d
Also known as "if you ain't storing cents, you ain't making sense."
KoalaUnknown@lemmy.world · 11 pts · 305d
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@lemmy.blahaj.zone · 4 pts · 305d
SmoothLiquidation@lemmy.world · 12 pts · 305d
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 pts · 305d
Use a dedicated data type or library. Some languages also have something like python's Decimal type
JakenVeina@midwest.social · 6 pts · 305d
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 pts · 305d
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 pts · 305d
i see what you're trying to say, but that's not what rational and irrational means (mathematically).
KoalaUnknown@lemmy.world · 2 pts · 305d
5765313496@lemmy.world · 1 pts · 305d
Look what they need to mimic a fraction of a fraction.
Grandwolf319@sh.itjust.works · 16 pts · 305d
Cause fractions can be figured out in context. You can store the numerators and have the denominator as a constant in the code.
frezik@lemmy.blahaj.zone · 11 pts · 305d
You can also have a type which does it. Raku has a Rational type for this.
dontsayaword@piefed.social · 5 pts · 305d
Part of my first programming courses in the 90s in C were creating a native fraction type.
Kacarott@aussie.zone · 4 pts · 305d
Python has the Fraction type, and there are many more
SpaceNoodle@lemmy.world · 13 pts · 305d
Don't be irrational.
orhtej2@eviltoast.org · 29 pts · 305d
wheezy@lemmy.ml · 4 pts · 305d
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 pts · 305d
I do enjoy how many number sets are referred to as "normal numbers":
hexagonwin@lemmy.sdf.org · 8 pts · 305d
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 · 8 pts · 305d
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 pts · 305d
hmm very weird. i also tried wget and it grabs the same 86x96 file. https://termbin.com/gvg9
wheezy@lemmy.ml · 1 pts · 305d
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 pts · 305d
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 pts · 305d
Awesome!
deaf_fish@midwest.social · 7 pts · 305d
I think you could argue that they're actually trying to mimic real numbers.
irelephant@lemmy.dbzer0.com · 4 pts · 305d
Eviltoasts pict-rs is being silly again
marcos@lemmy.world · -6 pts · 305d
It's not "mimicking" a fraction. It is a fraction.
It's also the most compact fraction representation around.
WhiskyTangoFoxtrot@lemmy.world · 19 pts · 305d
Show how 1/3 can be precisely represented in floating point.
BigMikeInAustin@lemmy.world · 36 pts · 305d
fl_numerator = 1
fl_denominator = 3
And division is a "stretch goal" once we get funding.
Gork@sopuli.xyz · 3 pts · 305d
How many decimal places can it be stretched?
MyBrainHurts@piefed.ca · 2 pts · 305d
As usual, the best jokes are in the comments. (Though goddamn I chuckled at the meme.)
xabit24368@lemmy.zip · 1 pts · 164d
you didn't answer the guy's question below you.... hrm....
marcos@lemmy.world · 1 pts · 305d
Do you have a computer type that can represent the entire rational set?
calcopiritus@lemmy.world · 4 pts · 305d
Yes. Have a structure with 2 BigInts. Treat one as the numerator. The other as denominators.
It might not be efficient or fast. But it is possible.
marcos@lemmy.world · 1 pts · 305d
You are proposing that can represent the entire rational set?
calcopiritus@lemmy.world · 1 pts · 305d
Yes that is correct. A BigInt represents the entire integer set.
Rational numbers are defined by just 2 integers. Therefore, 2 BigInts represent the entire rational set.
WhiskyTangoFoxtrot@lemmy.world · 3 pts · 305d
No. They all need to mimic certain numbers.
marcos@lemmy.world · 1 pts · 305d
So, you have a notation that can represent the entire rational set?
What exactly is being mimicked?
WhiskyTangoFoxtrot@lemmy.world · 1 pts · 304d
No. That's not what the meme is about, and that's not what we're arguing about.
Fractions.
aaaaaaaaargh@feddit.org · 3 pts · 305d
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@lemmy.blahaj.zone · 13 pts · 305d
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 pts · 305d
I doubt the layout is relevant there as the FPU should be just physically wired to handle it.