Newsgroup: it.comp.os.linux.iniziare
Titolo: Portata della calcolatrice Bc

/* crosspost linux.software-sys-iniziare (senza f/u) */
 
Potete dirmi qual e' il numero massimo di cifre che bc puo'
trattare grazie in anticipo?
 
P.S. Sono con la Debian stable amd64, con kernel bloccato alla
versione:
Linux busterdeb 4.19.0-10-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24)
 x86_64 GNU/Linux
 
perche' i successivi non hanno piu' lo scroll shift-pg up/down.
 
-- 
bye, Yoda
 

 perche' i successivi non hanno piu' lo scroll shift-pg up/down.
 
Davvero?
Interessante...
 
bye,
 
-- 
 
piergiorgio

 tu non intenda altro.
 
Puoi dirmi nella tua Fedora qual e' ad esempio l'esponente massimo
ciao e grazie?
 
-- 
Yoda
 


info bc -> Limits
 
 
Next: Environment Variables,  Prev: Comparison with Other 
Implementations,  Up: Top
 
9 Limits
********
 
The following are the limits currently in place for this 'bc' processor.
Some of them may have been changed by an installation.  Use the 'limits'
statement to see the actual values.
 
'BC_BASE_MAX'
     The maximum output base is currently set at 999.  The maximum input
     base is 16.
 
'BC_DIM_MAX'
     This is currently an arbitrary limit of 65535 as distributed.  Your
     installation may be different.
 
'BC_SCALE_MAX'
     The number of digits after the decimal point is limited to INT_MAX
     digits.  Also, the number of digits before the decimal point is
     limited to INT_MAX digits.
 
'BC_STRING_MAX'
     The limit on the number of characters in a string is INT_MAX
     characters.
 
'exponent'
     The value of the exponent in the raise operation (^) is limited to
     LONG_MAX.
 
'multiply'
     The multiply routine may yield incorrect results if a number has
     more than LONG_MAX / 90 total digits.  For 32 bit longs, this
     number is 23,860,929 digits.
 
'variable names'
     The current limit on the number of unique names is 32767 for each
     of simple variables, arrays and functions.

Addi' 28 mar 2021 19:05:10, Giuseppe Della Bianca scrive:

Si' questo l'avevo visto, ma 23 milioni sono che vogliono dire che
come output d'un calcolo il numero deve avere al max 23 milioni di
cifre cioe' di ottetti, come dire un file di venti mega? e poi con
l'amd64 il limite aumenta o resta uguale? ciao e grazie
 
-- 
Yoda
 

>>>>>  Use the 'limits' statement to see the actual values. <<<<<<
 
bc [invio]
limits [invio]
 
Per il resto penso di si, non uso bc, puoi provare con un motore di ricerca per avere la definizone esatta.
 
Prego.

 di ricerca per avere la definizone esatta.
 
Grazie!! ciao
 
[~]yoda_$: echo limits | bc
BC_BASE_MAX     = 
2147483647
 
BC_DIM_MAX      = 16777215
BC_SCALE_MAX    = 
2147483647
 
BC_STRING_MAX   = 
2147483647
 
MAX Exponent    = 9223372036854775807
Number of vars  = 32767
 
-- 
Yoda
 

 l'amd64 il limite aumenta o resta uguale? ciao e grazie
 
Ma leggere la man page?
 
"bc is a language that supports arbitrary
precision numbers"
 
La domanda sarebbe cosa vuol dire questo,
ma da quello che capisco io non dipende
dalla CPU sottostante.
 
bye,
 
 
-- 
 
piergiorgio

 Number of vars  = 32767
 
Idem x me con 64 bit e 16 GB di RAM, e alla prova dei fatti per la
potenza di 1 alla BC_BASE_MAX bc mi restituisce correttamente 1
 
$ bc <<< 1^
2147483647
 
1
 
Trovo però curioso che sia possibile "sforare" di un paio di unità per
l'esponente, cioé
 
$ bc <<< 1^
2147483648
 
1
 
$ bc <<< 1^
2147483649
 
1
 
mentre se vado ancora oltre inizia a restituirmi un errore:
 
$ bc <<< 1^
2147483650
 
Runtime error (func=(main), adr=14): exponent too large in raise
 

 Runtime error (func=(main), adr=14): exponent too large in raise
 
Anche da me solo da 50 in poi da' errore.
 
Avra' anche ragione Piergiorgio a dirmi di leggere la manpagina,
pero' la terminologia e' troppo specializzata.. mica semplice,
almeno per me, capire cosa vuol dire BC_BASE_MAX = 
2147483647
 che
tu invece metti ad esponente, mentre bc mette MAX Exponent =
9223372036854775807 cioe' esponente di cosa?! ciao
 
Adesso ho dato:
$: time bc -l <<< 2^
2147483647
 > /dev/null
sta ancora girando ed usa una sola delle 4 cpu (guardo con htop)
 
-- 
Yoda
 

 sta ancora girando ed usa una sola delle 4 cpu (guardo con htop)
 
Aridaje :-) ieri avevo provato a dare l'identico comando (senza
/dev/null però) ma, come mi aspettavo, quest'oggi non aveva ancora
finito di calcolare ed ho interrotto perché mi ero rotto le scatole di
aspettare. Forse per velocizzare avrei potuto usare parallel ma ci sono
arrivato solo ora ...
 
Perché nel comando bc hai usato l'opzione -l ?
 
Nel man leggo:
 
-l, --mathlib
    Define the standard math library.
 
Ho letto diverse guide dove il comando bc era seguito da -l ma non ne ho
compreso l'utilizzo.
 

 
 
E` probabile, ma non posso assicurarlo,
che "bc" usi qualcosa come "gmp":
 
https://gmplib.org/
 
 
Forse sarebbe il caso di spiegare se
questa tua richiesta e` per semplice
curiosita`, oppure hai in mente una
idea, che, magari si potrebbe anche
risolvere diversamente da "bc".
 
bye,
 
-- 
 
piergiorgio

Addi' 06 apr 2021 11:52:29, Tony Borlini scrive:

So che, da me, bc liscio e' con scale=0 (es.: echo 3/2 | bc da' 1),
mentre con -l va in virgola mobile ciao e l'ho killato anch'io bc,
ma a neppure mezz'ora.. ora che leggo il tuo non ho piu' rimpianti
 
-- 
Yoda
 

 ma a neppure mezz'ora.. ora che leggo il tuo non ho piu' rimpianti
 
Sì, avevo letto anch'io che l'opzione -l imposta lo scale a 20 cifre
dopo la virgola
 
$ bc <<< 3/.28
10
 
$ bc <<< "scale=5; 3/.28"
10.71428
 
$ bc -l <<< 3/.28
10.71428571428571428571
 
ma tale opzione da questo punto di vista mi pareva ininfluente per
l'esempio, ( bc -l <<< 2^
2147483647
 ) di calcolo di una potenza che
avevi riportato.