this post was submitted on 07 Dec 2023
178 points (90.8% liked)

Programming Horror

1833 readers
1 users here now

Welcome to Programming Horror!

This is a place to share strange or terrible code you come across.

For more general memes about programming there's also Programmer Humor.

Looking for mods. If youre interested in moderating the community feel free to dm @Ategon@programming.dev

Rules

Credits

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] neidu@feddit.nl 17 points 9 months ago* (last edited 9 months ago) (5 children)

My solution in perl back in the day when I was a teenage hobbyist who didn't know about the modulus operator: Divide by 2 and use regex to check for a decimal point.

if ($num / 2 =~ /\./) { return "odd" }
else { return "even" }

[–] lysdexic@programming.dev 18 points 9 months ago (4 children)

Divide by 2 and check for a decimal point.

I mean, it ain't wrong.

[–] Chobbes@lemmy.world 4 points 9 months ago (3 children)

You know, I was going to let this slide under the notion that we're just ignoring the limited precision of floating point numbers... But then I thought about it and it's probably not right even if you were computing with real numbers! The decimal representation of real numbers isn't unique, so this could tell me that "2 = 1.9999..." is odd. Maybe your string coercion is guaranteed to return the finite decimal representation, but I think that would be undecidable.

[–] backgroundcow@lemmy.world 4 points 9 months ago (1 children)

Ackchyually-- IEEE 754 guarantees any integer with absolute value less than 2^24 to be exactly representable as a single precision float. So, the "divide by 2, check for decimals" should be safe as long as the origin of the number being checked is somewhat reasonable.

[–] Chobbes@lemmy.world 2 points 9 months ago

Of course, but it's somewhat nasty when all of a sudden is_even doesn't do what you expect :).

load more comments (1 replies)
load more comments (1 replies)
load more comments (1 replies)