Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Challenge for you...
#11
That formula in the first post - that's exactly the reason to hate formulas. Basically, it's like trying to write something simple horribly in maximum complicated form.

@BPlus - I haven't dealt with factorials so far - and I was thinking - why are you solving it in the form of strings. Then wrote it my way and understood. For the first time in my life, have exhausted the limit for the largest data type in QB64 - FLOAT. Yeah, so - you already know. That's why you're doing it right! Smile


My function for calculating factorial is simple:

Code: (Select All)
Function CalcFac## (value##)
    Do Until i## = value## - 1##
        If c## = 0 Then a## = 1## Else a## = c##
        b## = i## + 1##
        c## = a## * b##
        i## = i## + 1##
    Loop
    CalcFac## = c## * value##
End Function

but factorial 500 is over limit for this function. Result number is tooooo high.


Reply
#12
(04-20-2023, 07:44 PM)Petr Wrote:
but factorial 500 is over limit for this function. Result number is tooooo high.

actually it's well within range, the problem is that the print statement converts the number to double
Reply
#13
@Jack

It's not Smile There will be an overflow there. I use Print Using to display the result, unfortunately we differ with the BPlus result somewhere around 22 orders of magnitude (this is the first time I wrote something like this, I don't know, one of the functions will probably do the rounding, either mine or the BPlus function. But what's interesting is that the ascii characters are printed in the number on overflow - I am attaching the source, note the repetition of the number series after overflow.

Code: (Select All)
Print Using "##############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################"; CalcFac(500)


Function CalcFac## (value##)
    Do Until i## = value## - 1##
        If c## = 0 Then a## = 1## Else a## = c##
        b## = i## + 1##
        c## = a## * b##
        i## = i## + 1##
    Loop
    CalcFac## = c## * value##
End Function


Reply
#14
So go through the factorial until you find the first 100 prime numbers? - There's an easier way.

First the prime numbers:

[Image: Primzahlen550-2023-04-20.jpg]

. . . and now the factorial from it:

[Image: Julia-Fak500-2023-04-20.jpg]
Reply
#15
Yes for _Float you can only have around first 16 digits that are accurate, not good for exact factorials 1000's of digits long ;(

I am tempted to try this because I did add Power to my String Math routines trouble is I don't have COS and I am afraid Power with unlimited digits would take days to run a calculation ;(
b = b + ...
Reply
#16
(04-20-2023, 08:34 PM)Kernelpanic Wrote: So go through the factorial until you find the first 100 prime numbers? - There's an easier way.

First the prime numbers:

[Image: Primzahlen550-2023-04-20.jpg]

. . . and now the factorial from it:

[Image: Julia-Fak500-2023-04-20.jpg]

Yes we all know an easier way to calculate the first 100 Primes, just about any way that gets Primes is easier than Eric's forumla he pointed to. 

The point is to try and get Primes with that dang very impractical formula! That formula is where the factorial thing is coming from, look at the first post in this thread again.
b = b + ...
Reply
#17
(04-20-2023, 06:34 PM)bplus Wrote: Here is 500! curtesy of bplus string math
500! = 1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

1143 digits minus first 7 = 1136 (everything right of the space after = sign)

Something seems wrong there, doesn't it?

[Image: Prin500-Calc2023-04-20.jpg]
Reply
#18
Quote:The point is to try and get Primes with that dang very impractical formula! That formula is where the factorial thing is coming from, look at the first post in this thread again.

I got that now understand . . . well, it's a task for evenings when you're out of a bottle of wine.  Tongue
Reply
#19
(04-20-2023, 08:39 PM)Kernelpanic Wrote:
(04-20-2023, 06:34 PM)bplus Wrote: Here is 500! curtesy of bplus string math
500! = 1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

1143 digits minus first 7 = 1136 (everything right of the space after = sign)

Something seems wrong there, doesn't it?

[Image: Prin500-Calc2023-04-20.jpg]

I might of miscalc digits but it matches exactly this source:
https://www.thelearningpoint.net/home/ma...torial-500

Quote:500! = 1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

500! = 1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
b = b + ...
Reply
#20
@Petr
Code: (Select All)
$Console:Only
_Dest _Console

f## = CalcFac(1754##)
Print f##

Function CalcFac## (value##)
    Do Until i## = value## - 1##
        If c## = 0 Then a## = 1## Else a## = c##
        b## = i## + 1##
        c## = a## * b##
        i## = i## + 1##
    Loop
    CalcFac## = c## * value##
End Function

Quote:1.979261890105010055F+4930

Press any key to continue

I fixed my version of QB64 so it will print _Float without problems Wink
Reply




Users browsing this thread: 50 Guest(s)