🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 6 September 2022.
scullucs Can I get arbitrary precision floating-point calculations, well, let's say, something like 30 digits after the point for example? 01:38
MasterDuke scullucs: arbitrary, but fixed to a specified precision? not in core. but if you just mean arbitrary, FatRat might be what you want 02:20
scullucs Hmm... I suppose rationals could do, yeah. 02:21
I said arbitrary, but fixed to some precision, because I don't think asking for all the decimals of an irrational is a rational demand 🙂 02:24
jdv the rats in nyc can be pretty fat sometimes
scullucs But yeah, it turns out that FatRat`s will work out in my use case.
doomslord scullucs: what you need a FatRat for that an Int cannot provide? 06:18
doomslord I mean: Integers don’t have denominators, but also as soon as you are relying on an exponential complex algorithm such as integer factorization to run your code, you are doomed 06:24
If you have only one denominator, Ints are as good as FatRats 06:25
Just don’t do it: never use FatRats 06:26
If you need FatRats, there is probably a better solution 06:27
doomslord The IBM POWER9 and the IBM z/Architecture support quadruple precision floating point (30 significant digits) in hardware 06:36
doomslord Although in wouldn’t advice to buy them hahaha 06:43
librasteve doomslord: i am sympathetic to your cause, but do you mean <doomslord> If you have only one denominator, Ints ^h^h^h Rats are as good as FatRats ??? 07:56
tellable6 librasteve, I'll pass your message to doomslord
librasteve otherwise i don’t understand where the denominator lives… 07:57
lucs: simplistically I would have said that FatRats are for you … but in “nanny” mode would urge you to think twice about your problem … 30 digits after the point is a very small number … way too small for anything physical 08:02
lemire.me/blog/2020/03/15/number-o...nt-values/
even in pure math there are many algorithms that become unstable with such small values 08:04
en.wikipedia.org/wiki/Numerical_stability 08:05
anyway since you are a rakoon, then I am sure you have good reasons and know all this 08:07
apologies for my intrusion 08:08
scullucs I'm simulating a mathematical process where values can be pretty close to, but greater than, zero. 08:19
Luckily, it turns out that FatRats appear to work fast enough for what I'm doing. 08:20
So the numbers I wanted to represent were something like 0.000000000000000000000001. 08:24
(and its multiples) 08:26
librasteve my first coding job was to write tests for an FPU in C … I can say with some confidence that you are not going to be able to get what you want from a regular FPU .. so some kind of integer based library like FatRat or maybe there is a C / perl / python library that you can wrap 08:37
scullucs Yep, FatRat appears to have worked (although I'm not sure I understand the results I'm getting). 08:40
Let me show you the thing I'm trying to simulate.
It's a puzzle that Cliff Pickover posted on Twitter. 08:41
: A mathematician emerges from a cave and says "I have cracked 10,000 rods at random into 2 pieces by throwing them against a rock. What do you think is the average ratio of the length of the long piece to the length of the short piece?" 08:42
I'm not knowledgeable enough to solve this with math, so I was curious to see what simulating the action would give. 08:43
librasteve .oO 08:44
me neither … i recall that some probability problems have pi (or may pi / 4) as a solution 08:45
reaches for ChatGPT… 08:47
perplexity.ai gave me a pretty good explanation … 08:49
scullucs Is an answer possible? 08:50
(according to that?)
librasteve well - that would be a spoiler! I think the approach is good - which is (look away now) to understand that "stick breaks at random point" means that "if the stick is 100 units long, there is a 1/100 chance it will break at the midpoint (50/50) and a 1/100 chance at 49/51 and so on" - then its just a (very thorny) summation / integration - but there is a clear solution 10:28
Xliff Well, that beats my approach. 10:30
for ^10000 { my $a = rand; [/]( |[ $a, 1 - $a ] ).sort; }; @a.sum / @a.elems }
I'm then doing that another 10000 times. Don't mind me. No sleep. Frustrated. Can't find my proper pair of glasses and I figured I'd hack together the most idiotic brute force algorithm ever. 10:31
And I forgot to use a FatRat.... that might explain why it hasn't finished. 10:32
[Coke] returns to his normally scheduled routine. Hio. 12:51
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2024/08/26/2024-...ro-💍-htmx/ 13:29
antononcube @lucs and @librasteve I think you are doing it wrong! 😛 13:57
Questions to consider: 1. Is the mathematician right handed or left handed? 2. Where the rock is located wrt to the mathematician? (Distance and direction.) 3. What are the size and shape of the rock? 4. Does the mathematician miss? 5. Is the rock flat or has sharp edge? (Edge which the mathematician aims at and reliably hit.) 6. How do the rods hit the rock? (Completely "flat" along the long side, on the one 14:06
small sides, anywhere in between.) 7. What is the shape of the rods? 8. Do the rods break when hitting the rock? More generally, what is the strength of rod's material wrt to the rock? 9. Does the rock break, and is it replaced another one? Same/similarly shaped or at random? 10. If a rod breaks is only in two parts? Do we measure the ratio of the two longest parts? 11. Are the rods all the same? 12. Etc.
Coming up with these kind of questions, choosing which of them to answer, and examining the answers, can help selecting, say, probabilistic models for the processes considered. 14:08
At that point -- for these kind of problems -- it is essential to have an extensive library with different probability / statistical distributions with which lists of random variates can be generated. 14:10
For example, see here: github.com/antononcube/Raku-Statis...rakumod#L8 14:11
As for the FatRat's -- they can happen "naturally" when doing certain recursive mathematical formulas, e.g. Chebyshev polynomials. I compared Raku's results with those Mathematica -- complete agreement on the FatRat / BigNum results. 14:13
use Math::Polynomial::Chebyshev; my $v = chebyshev-t(100, <1/4>.FatRat, method => 'recursive') 14:15
cdn.discordapp.com/attachments/633...00eee&
scullucs Welp, that's pretty much what I did. 14:23
Oh! reading... 14:24
@antononcube So many things I didn't consider! 🙂 14:25
antononcube @lucs Interesting problem to tackle with Raku, for sure. Made me notice a bug "Statistics::Distributions" (fixed now.) 14:34
@scullucs Damn! I thinking too much about this problem now! 🙂 15:13
scullucs Sorry! 😂
lizmat antononcube would you have any ideas about integrating LLM features into the Raku documentation website docs.raku.org ? 15:23
[Coke] I have no desire to include non-core LLM stuff on the docs site. 15:24
antononcube @lizmat Sorry, @Coke is back to their "normally scheduled routine", so, we missed our chance for "LLMs-in-the-docs." 😭 16:22
lizmat antononcube I think [Coke]'s emphasis was on non-core 16:23
scullucs @antononcube At first, I thought you were joking with those "Questions to consider". 16:32
But from what you showed me in direct message I see that you were serious, and that those questions should perhaps be addressed to get a comprehensive solution. 16:32
I was trying to solve a very limited version which might be stated as: "If a line segment is separated in two parts at some random point, excluding the endpoints, on average, what is the ratio of the length of the longer part to the shorter one?"
So I think that, and very respectfully, you know too much!
"If the tools you have include a hammer, a screwdriver, a shovel, a vise grip, a wrench, a saw, reverse pliers, and a cable stripper, you tend to see every problem as a weekend project." 🙂
[Coke] Yah, happy to discuss docs in general, but docs.raku.org is, in my mind, primarily for language spec (with some allowance for only having one implementation) 16:34
antononcube @lizmat Hmm... not-sure what that means. ("non-core LLM functionalities.") 16:39
[Coke] any raku LLM stuff is outside of core. No? 16:40
antononcube For what is worth here is what I think it is need for a really "strong" LLM presence in Raku (i.e. few things have to be figured out): 1. Streamlined and easy way of including new LLM service providers. 1.1. Right now there are five LLM-services packages: "WWW::OpenAI", "WWW::PaLM", "WWW::MistralAI", "WWW::Gemini", "WWW::LLaMA" 1.2. But at least another four or five LLM-services are (or becoming) popular:
Anthropic, AlephAlpha, Cohere, DeepSeek, Groq, TogetherAI. 1.2.1. I have not looked into their interfaces -- maybe they are similar to that of OpenAI. (If yes, corresponding packages can be easily made.) 1.2.2. I have an experimental LLM project for making Raku packages from LLM-access API documentation, but it is a low priority for now. 1.2.3. Maybe there is much more streamlined or easy way than making a Raku package for
every LLM-service. 2. Better documentation of LLM-access configurations. 2.1. That is "easy", but it is only outlined how to do "LLM::Functions". 3. Easy utilization of (i) user made/specified prompts, and (ii) prompts from the Web. 3.1. Usage of user prompts has been supported from the very beginning of my LLM projects. 3.2. Inclusion of user defined prompts into a local database is supported, but has to be documented better.
3.2.1. And probably, easier to do. 3.3. Usage and inclusion of "any prompt found in the Web" is something I have considered for a long time. 3.3.1. Something like llm-resource-function. 3.3.2. Never got a good implementation design for it.
lizmat afk for a few hours& 16:43
antononcube 4. Some sort of curated and central for the Raku community repository of prompts, in which anyone can contribute. (And review.) 4.1. I am not sure is this a good idea. 4.2. It is less important if 3.3 above is implemented. 16:44
@Coke Yes -- LLM functionalities are out of the core. 16:44
But Raku's LLM functionalities can be featured in the section/page similar to "Doing math with Raku", docs.raku.org/language/math . 16:46
I.e. "Doing LLMs with Raku" of similar.
BTW, I consider the section name "Numerical integration of ordinary differential equations" misleading. (docs.raku.org/language/math#Numeri...quations). It should be "Numerical solution of ordinary differential equations." 16:48
I know that "numerical integration" is used a lot to refer to solutions of differential equations, but it is misleading, since one might think that Raku can compute integrals. 16:49
(Another project I really should get back to: "Math::NIntegrate".) 16:50
@lucs Fine, let me write a oneliner that uses the Beta Distribution or the Truncated Normal Distribution. 16:53
scullucs I don't know what that means, I'm really ignorant 😦 16:58
But I suspect that one interesting intuitive way of looking at the problem is that the a typical thrown rock will be closer to the center than the edge, that is, the randomly chosen points should appear more frequently near the center -- I guess there is typical distribution that can represent something like that. 17:01
antononcube Yes, with "typical distribution" I think you mean "Normal Distribution".
scullucs I guess, yeah. Does that make sense? 17:02
antononcube The distribution selection plays a great role. 17:09
scullucs I think that how close to the edge a point can be chosen can also make the average increase. 17:12
antononcube @lucs Here is a "short mode", which I did not make a one liner since the steps are didactic: my $n = 10_000; my @trials = random-variate(NormalDistribution.new(1/2,1/5), $n).grep(0≤*≤1); @trials.map({ my $a = 1-$_; $_ > $a ?? $_ / $a !! $a / $_ }).sum / @trials.elems
Note that the code above uses less than 10_000 trials to compute the ratios. (I seems that the misfirings are less than 2%.) 17:13
It is very instructive to plot the histogram of the trials. The easiest way to do that is to use "Text::Plot": use Text::Plot; text-histogram(@trials, height=>20, x-limit=>(0,1)) 17:16
scullucs @antononcube Thanks for the code. 17:31
antononcube .release6 21:37
releasable6: status
releasable6 antononcube, Next release in ≈2 days and ≈21 hours. There are no known blockers. Changelog for this release was not started yet
antononcube, Details: gist.github.com/34b1d7f2a92dad8d0e...27285b08db