\( \newcommand{\abcp}[3]{\frc{#1+\sqrt{#2}}{#3}} \newcommand{\chao}[1]{\left\lfloor #1 \right\rfloor } \newcommand{\nPr}[2]{{}^{#1}A_{#2} } \newcommand{\combin}[2]{{}^{#1}C_{#2} } \newcommand{\cmod}[3]{#1 \equiv #2\left(\bmod {}{#3}\right)} \newcommand{\frc}[2]{\displaystyle\frac{#1}{#2}} \newcommand{\mdc}[2]{\left( {#1},{#2}\right)} \newcommand{\mmc}[2]{\left[ {#1},{#2}\right]} \newcommand{\cis}{\mathop{\rm cis}} \newcommand{\ImP}{\mathop{\rm Im}} \newcommand{\ReP}{\mathop{\rm Re}} \newcommand{\sen}{\mathop{\rm sen}} \newcommand{\tg}{\mathop{\rm tg}} \newcommand{\cotg}{\mathop{\rm cotg}} \newcommand{\cosec}{\mathop{\rm cosec}} \newcommand{\cotgh}{\mathop{\rm cotgh}} \newcommand{\cosech}{\mathop{\rm cosech}} \newcommand{\sech}{\mathop{\rm sech}} \newcommand{\sh}{\mathop{\rm sh}} \newcommand{\ch}{\mathop{\rm ch}} \newcommand{\th}{\mathop{\rm th}} \newcommand{\senEL}[1]{\mathop{\rm sen}^{#1}} \newcommand{\tgEL}[1]{\mathop{\rm tg}^{#1}} \newcommand{\cotgEL}[1]{\mathop{\rm cotg}^{#1}} \newcommand{\cosecEL}[1]{\mathop{\rm cosec}^{#1}} \newcommand{\shEL}[1]{\mathop{\rm sh^{#1}}} \newcommand{\chEL}[1]{\mathop{\rm ch^{#1}}} \newcommand{\thEL}[1]{\mathop{\rm th^{#1}}} \newcommand{\cotghEL}[1]{\mathop{\rm cotgh^{#1}}} \newcommand{\cosechEL}[1]{\mathop{\rm cosech^{#1}}} \newcommand{\sechEL}[1]{\mathop{\rm sech^{#1}}} \newcommand{\senq}{\senEL{2}} \newcommand{\tgq}{\tgEL{2}} \newcommand{\cotgq}{\cotgEL{2}} \newcommand{\cosecq}{\cosecEL{2}} \newcommand{\cotghq}{\cotghEL{2}} \newcommand{\cosechq}{\cosechEL{2}} \newcommand{\sechq}{\sechEL{2}} \newcommand{\shq}{\shEL{2}} \newcommand{\chq}{\chEL{2}} \newcommand{\arctg}{\mathop{\rm arctg}} \newcommand{\arcsen}{\mathop{\rm arcsen}} \newcommand{\argsh}{\mathop{\rm argsh}} \newcommand{\argch}{\mathop{\rm argch}} \newcommand{\argth}{\mathop{\rm argth}} \newcommand{\Var}{\mathop{\rm Var}} \newcommand{\vect}[1]{\overrightarrow{#1}} \newcommand{\tr}[1]{ \textnormal{Tr}\left({#1}\right)} \newcommand{\C}{\mathbb{C}} \newcommand{\E}{\mathbb{E}} \newcommand{\H}{\mathbb{H}} \newcommand{\I}{\mathbb{I}} \newcommand{\N}{\mathbb{N}} \newcommand{\P}{\mathbb{P}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\R}{\mathbb{R}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\til}{\sim} \newcommand{\mdc}{\mathop{\rm m.d.c.}} \newcommand{\mmc}{\mathop{\rm m.m.c.}} \newcommand{\vect}[1]{\overrightarrow{#1}} \newcommand{\dfrc}{\displaystyle\frac} \newcommand{\Mod}[1]{\ (\mathrm{mod}\ #1)} \)
Mostrar mensagens com a etiqueta Zx Spectrum. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Zx Spectrum. Mostrar todas as mensagens

quinta-feira, 28 de agosto de 2025

Aplicando cegamente o algoritmo das fracções contínuas...

    

No texto anterior referi-me aos "erros de arredondamento" no algoritmo (original, sem modificações) das fracções contínuas.
Chamar-lhes "erros de arredondamento" não está totalmente correcto.
A aritmética das calculadoras não é a dos nossos conhecidos números reais.
Nem sequer racionais!
Entramos no conjunto dos "números de ponto flutuante" ou "números de vírgula flutuante"
 se o separador decimal for uma vírgula em vez de um número.
Portanto aqueles "erros" devem-se também a outros factores, para além de arredondamentos.
Serão esses erros assim tão significativos, como escrevi na altura?

Hoje decidi implementar o algoritmo para calcular os primeiros 59 $(a_n)$ no meu emulador de
Zx Spectrum, comparar com os resultados obtidos com o Wolfram Mathematica de um dos meus
 Raspberry Pi 4b, com uma calculadora Casio, uma Texas Instruments, o Libre Office Calc,
 e uma calculadora Numworks.


As imagens são da implementação em Zx Spectrum 48k. O valor de $a_9$ já está mal!
Vamos lá ver se consigo copiar os resultados das outras máquinas para aqui.

n

Correcto

LibreOffice
calc

Wolfram
Mathematica

Ti84PlusCE

Casio 9860GII

Numworks

Zx Spectrum
48k

0

33

33

33

33

33

33

33

1

1

1

1

1

1

1

1

2

3

3

3

3

3

3

3

3

1

1

1

1

1

1

1

4

1

1

1

1

1

1

1

5

12

12

12

12

12

12

12

6

1

1

1

1

1

1

1

7

21

21

21

21

21

21

21

8

1

1

1

1

1

1

1

9

1

1

1

1

1

1

3

10

2

2

2

2

2

2

4

11

5

5

5

5

5

5

4

12

4

4

4

4

4

4

1

13

3

3

3

3

3

3

1

14

7

7

7

4

9

7

4

15

5

59

5

2

7

58

1

16

16

6

16

6

1

1

1

17

1

1

1

2

1

2

7

18

2

5

2

1

1

25

2

19

3

7

3

2

1

16

2

20

1

1

1

3

4

1

1

21

1

22

1

1

1

3

1

22

1

1

1

3

4

19

1

23

2

1

2

2

2

3

52

24

1

1

1

1

4

2

6

25

2

1

2

27

1

1

104

26

1

2

1

1

6

1

13

27

4

1

4

18

1

2

5

28

1

4

1

1

1

3

1

29

8

1

8

9

1

6

3

30

1

4

1

3

2

1

1

31

4

3

4

1

1

2

1

32

1

5

1

1

8

1

9

33

2

1

2

2

10

4

3

34

1

23

1

26

6

1

5

35

2

1

2

1

1

-

1

36

1

3

1

11

2

-

12

37

1

19

1

1

2

-

1

38

1

5

1

19

1

-

1

39

3

1

3

131

1

-

8

40

2

6

2

1

4

-

30

41

1

1

1

80

1

-

1

42

16

3

16

2

2

-

1

43

5

3

5

1

1

-

4

44

7

2

7

3

7

-

1

45

3

1

3

1

2

-

1

46

4

5

4

2

2

-

1

47

5

3

5

1

4092

-

1

48

2

9

2

2

3

-

2

49

1

1

1

1

1

-

6

50

1

2

1

5

18

-

2

51

21

2

21

5

1

-

57

52

1

1

1

1

1

-

2

53

12

7

12

1

1

-

26

54

1

4

1

1

1

-

1

55

1

1

1

2

5

-

2

56

3

1

3

1

1

-

1

57

1

3

1

8

3

-

31

58

66

1

66

2

2

-

9


Os cálculos dos números correctos estão no texto anterior, naquele botão com uma raiz de 1141.
Portanto: 
  • LibreOffice Calc: correcto até $a_{14}$
  • Wolfram Mathematica: todos correctos
  • TI 84 Plus CE: correcto até $a_{13}$
  • Casio fx-9860 GII SD: correcto até $a_{13}$
  • Numworks: correcto até $a_{14}$, e erro de memória a partir de $a_{35}$
  • ZX Spectrum: correcto até $a_{9}$
O leitor interessado, pode testar outras máquinas ou outras linguagens de programação. 
Á excepção do Zx Spectrum (máquina de 1982) e do Wolfram Mathematica, não escrevi código algum.
Apenas utilizei as funções internas de cada uma das máquinas/softwares.

Como eu disse no texto anterior, há formas de ultrapassar isto, e fazer todas estas máquinas dar resultados correctos. Isso consegue-se, estudando matematicamente as sucessões $(a_n)$ e $(\alpha_n)$. 
O segredo não é informático.

É matemático!

terça-feira, 22 de julho de 2025

Hexágonos do passado

 Enquanto escrevo isto, o meu pai está no serviço de urgências. 
E eu tenho uma consulta médica daqui a umas horas, devia estar a dormir...

Estou deitado, na cama, acordado.

O facebook continua a achar que eu estou interessado em apicultura.

Num dos posts anteriores, eu disse que "Python é só a linguagem da moda".

Bem, é verdade sim.
Recentemente alguns conhecidos meus passaram a entreter-se com 'uma consola' dos anos 80.

O Zx Spectrum.

Eu nunca tive um Spectrum. Nem vou comprar esta nova versão.
 Um familiar meu teve, colegas meus do (agora) 3°ciclo tiveram, e na altura eu fiquei com a vaga ideia do que era. A primeira vez que vi código – sem perceber patavina daquilo – foi num ZX Spectrum.

Sim, aquilo era programável! Podia-se gravar  código em cassetes e carregar código a partir de cassetes!

Eu fiquei com dificuldades em chamar consola àquilo. Aquilo para mim, era um computador.

A primeira vez que escrevi código meu foi para uma calculadora. Foi nessa altura que percebi o verdadeiro potencial do Spectrum. 

Escrever código meu para Spectrum, só o fiz muitissimo mais tarde, só depois de ter abandonado a Universidade da Madeira, e só por curiosidade.

O Sinclair Basic é muito semelhante a algum do    código que escrevi para algumas calculadoras.

Na verdade, não foi bem para um Spectrum, foi para um emulador de Spectrum. 

Não me apetece gastar dinheiro num Spectrum, em primeiro lugar, porque neste momento, não estou a trabalhar, e em segundo lugar, porque consigo emular legalmente num Raspberry Pi que me saiu bem mais barato que aquela 'consola'.

Também não quero me por a gastar muito tempo num Spectrum mas... sabem? Consegue-se programar uma pavimentação de hexágonos num Spectrum (Pronto, num emulador).

Eu não vou escrever sinclair basic no telemovel, mas posso partilhar screenshots que tenho de outras coisas que copiei de livros para um emulador, enquanto aprendia o essencial...
Estes screenshots vieram de um Raspberry Pi.






O "Espaçoporto" é do livro "Programming your Zx Spectrum" de Tim Hartnell e Dylwin Jones.
Eu tive acesso a uma versão em português, mas, as minhas experiencias com livros de Matemática mostraram-me que versões originais, são sempre  melhores do  que traduções por isso acabei a adquirir a versão original, online.

Será que ainda consigo converter o programa de pavimentações que escrevi na calculadora para o Spectrum? 
Parece que sim! - Não foi escrito no smartphone. Foi escrito em alguns minutos, num emulador a correr no Raspberry Pi, olhando para o código da calculadora e reutilizando código antigo.
Não está optimizado, foi mesmo só para mostrar, que até num Spectrum se faz.
Usa o mesmo algoritmo que criei para a calculadora...

PS: 
  • Também é fácil criar um "Espaçoporto" na calculadora, mas ... tenham juizo.
  • Obviamente, à excepção do "Hello World", nenhum dos códigos Sinclair Basic está completo nas imagens.
    No código da pavimentação, as linhas 6,7,8 e 9 podem ser apagadas. Foram usadas para testes...
  • Não "colem" linguagens de programação a Matemática. Matemática transcende isso. Pode-se e deve-se recorrer a tudo o que ajude a ensinar Matemática. Só que deve-se distinguir uma coisa da outra. Quem não faz ideia do que diz, que feche a boca e informe-se primeiro.
  • O meu pai teve alta no princípio da manhã, e eu lá tive a minha consulta com 1h30m de atraso. Nem reclamo. Já tive piores!