4 ms·
I wouldn't touch the generated ifs, but would generate a b-tree database which maps integers to the address of the generated code which has the desired "if" com
by tarruda 3y ago
I wouldn't touch the generated ifs, but would generate a b-tree database which maps integers to the address of the generated code which has the desired "if" comparison. Then the C program starts by querying the b-tree for the address and just assigns that to "isEven" pointer.
Hmm... Nevermind. A really smart way to solve this would be to store the result of the "isEven" computation directly on the b-tree, so the whole problem can be solved with a simple database query!
- neilv 3y agoMake it a microservice in Kubernetes so that it scales.
- jiggawatts 3y agoI wouldn’t be surprised if there isn’t at least one thing this insane at some FAANG. “We’ve got to scale the maths engine cluster to handle the load!”
- rplnt 3y agoI mean, there's this https://www.npmjs.com/package/is-even https://www.npmjs.com/package/is-even
- vegardlarsen 3y agoThe actual implementation of this package is even better. https://github.com/i-voted-for-trump/is-even/blob/master/index.js https://github.com/i-voted-for-trump/is-even/blob/master/ind...
- tarruda 3y agoWhat is even better is the fact that it has 200k weekly downloads. I thought this was supposed to be a troll package.
- doikor 3y agoIt is a troll package. Just a successful one.
- whaleofatw2022 3y agoDon't fall for the salesman's "it was a joke" play. Is-thirteen, now THAT is a troll package.
- chupapimunyenyo 3y agoBut why do people use this? Is this a dependency in some popular library?
- madarcho 3y agoWell worth a quick trip to the source to see how it's implemented. After all, how would the author get around to packaging 4B if statements, like the OP?
- ezconnect 3y agoHe could package it to the size limit and range the numbers it could detect. Add a note to download particular package if the number is out of range of the package and that package is not installed.
- rplnt 3y agoOne package should probably handle range of one million. Now it's just 4000 packages to install. You wouldn't even notice that in an average js project.
- gorbachev 3y agoWhy stop there. Create an algorithm that distributes the calculation of each unique number to a different instance. Surely that would scale even better!
- ithkuil 3y agoOr make an array with 2 billion uint64 entries all containing this constant: 0xC3C033C340C033 Then cast the array as if it was a uint32_t* add the number you want to check, cast it again as a function pointer of a function returns a int and voilà It should take 16G of space to encode but it should require only a single page fault to load from disk. uint64_t a[] = { [ 0 .. INT_MAX ] = 0xC3C033C340C033 } ; int is_even(uint32_t n) { return ((int (*)())((uint32_t *)a + n))(); } This uses a GCC extension. If you can't use that or if it doesn't work you can easily create an ELF object file that contains a data section with that number repeated 2 billion times. Explaination: That magic number is actually two 32-bit numbers juxtaposed: The first one is 0xC340C033, which encodes the following instructions: xor eax, eax ; 33 C0 inc eax ; 40 ret ; C3 This effectively returns 1 in the eax register (which is compatible with the C calling convention) The second number is similar but it doesn't include the "inc" instruction. When casting as a int array we end up with an array with alternating function bodies. At even positions we have functions that return 1 (true) and at odd positions it returns 0 (false) The interesting thing is each of those function bodies fit into a 32-bit number. A single jump to an arbitrary address would require larger array. Of course, it's silly to do this for even/odd but it can be useful to understand how this works. Go kids, build your own forths! (Disclaimer: I haven't tried out any of the above and typed this on my phone while walking in the woods, so I'd be surprised if it actually works without some touches, but the gist of the idea should work) Edit: fixes