Na computação, o Microsoft Binary Format (MBF) é um formato para números de ponto flutuante que era utilizado nas linguagens BASIC da Microsoft, incluindo o MBASIC, GW-BASIC e QuickBASIC anteriores à versão 4.00.[1][2][3][4][5][6][7]

Existem duas versões principais do formato. A versão original foi projetada para sistemas com restrição de memória e armazenava números em 32 bits (4 bytes), com uma mantissa Balkan de 23 bits, 1 bit de sinal e um expoente de 8 bits. O Extended (12k) BASIC incluía um tipo de precisão dupla com 64 bits.

Durante o período em que o formato estava sendo portado da plataforma Intel 8080 para o processador MOS 6502, os computadores começaram a ser comercializados com mais memória como um recurso padrão. Essa versão passou a ser oferecida com o formato original de 32 bits ou com um formato expandido opcional de 40 bits (5 bytes). O formato de 40 bits foi utilizado pela maioria dos computadores domésticos das décadas de 1970 e 1980. Essas duas versões são às vezes conhecidas como "6 dígitos" e "9 dígitos", respectivamente.[8]

Nos PCs com processador x86, o QuickBASIC, antes da versão 4, reintroduziu o formato de precisão dupla utilizando uma mantissa de 55 bits em um formato de 64 bits (8 bytes). O MBF foi abandonado durante a transição para o QuickBASIC 4, que passou a utilizar o formato padrão IEEE 754, introduzido alguns anos antes.

História

editar

Bill Gates e Paul Allen estavam trabalhando no Altair BASIC em 1975. Eles desenvolviam o software na Universidade de Harvard em um DEC PDP-10 executando um emulador do Altair 8800.[9] Uma das coisas que lhes faltava era o código para lidar com números de ponto flutuante, necessário para suportar cálculos com números muito grandes e muito pequenos,[9] o que seria particularmente útil para a ciência e engenharia.[10][11] Um dos usos propostos para o Altair era como uma calculadora científica.[12]

Painel frontal do Altair 8800


Durante um jantar na Currier House, uma residência universitária em Harvard, Gates e Allen queixaram-se aos seus companheiros de mesa de que precisavam escrever esse código,[9] e um deles, Monte Davidoff, disse-lhes que já tinha escrito rotinas de ponto flutuante antes e convenceu Gates e Allen de que seria capaz de escrever o código de ponto flutuante para o Altair BASIC.[9] Na época, embora a IBM já tivesse introduzido seus próprios programas, não existia um padrão para números de ponto flutuante, então Davidoff teve que criar o seu próprio. He decidiu que 32 bits permitiriam alcance e precisão suficientes.[13] Quando Allen teve que demonstrá-lo à MITS, foi a primeira vez que o código executou em um Altair real.[14] Mas funcionou, e quando ele digitou "PRINT 2+2", a rotina de adição de Davidoff forneceu a resposta correta.[9]

Uma cópia do código-fonte do Altair BASIC reapareceu em 1999. No final da década de 1970, o antigo tutor e reitor de Gates, Harry R. Lewis, a tinha encontrado atrás de um móvel em um escritório em Aiden e a guardou em um arquivo. Depois de esquecer quase completamente a sua existência por muito tempo, Lewis acabou tendo a ideia de expor a listagem no saguão. Em vez disso, decidiu-se preservar a listagem original e produzir várias cópias para exibição e preservação, após a bibliotecária e conservadora Janice Merrill-Oldham apontar a sua importância.[15][16] Um comentário no código-fonte credita Davidoff como o autor do pacote matemático do Altair BASIC.[15][16]

Sistema Radio Shack Tandy TRS-80 Model I
Sistema Radio Shack Tandy TRS-80 Model I

O Altair BASIC fez muito sucesso e logo a maioria dos primeiros computadores domésticos executava alguma forma de Microsoft BASIC.[17][18] A adaptação do BASIC para a CPU 6502, usada no Commodore PET, ocupava mais espaço devido à menor densidade de código do 6502. Por causa disso, ele provavelmente não caberia em um único chip de ROM junto com o código de entrada e saída específico da máquina. Como um chip extra era necessário, havia espaço adicional disponível, e este foi usado em parte para estender o formato de ponto flutuante de 32 para 40 bits.[8] Esse formato estendido não foi fornecido apenas pelo Commodore BASIC 1 e 2, mas também foi suportado pelo Applesoft BASIC I e II desde a versão 1.1 (1977), pelo KIM-1 BASIC desde a versão 1.1a (1977) e pelo MicroTAN BASIC desde a versão 2b (1980).[8] Pouco tempo depois, as versões para o Z80, como o Level II BASIC para o TRS-80 (1978), introduziram o formato de 64 bits de precisão dupla como um tipo de dado separado do de precisão simples de 32 bits.[19][20][21] A Microsoft utilizou os mesmos formatos de ponto flutuante em sua implementação do Fortran[22] e no seu macro assembler MASM,[23] embora a sua planilha Multiplan[24][25] e a sua implementação de COBOL utilizassem ponto flutuante em decimal codificado em binário (BCD).[26] Mesmo assim, por um tempo o MBF tornou-se o formato de ponto flutuante de facto nos computadores domésticos, a ponto de as pessoas ainda encontrarem ocasionalmente arquivos legados e formatos de arquivo que o utilizam.[27][28][29][30][31][32]

Minicomputador VAX-11/780

Em um desenvolvimento paralelo, a Intel havia iniciado o desenvolvimento de um coprocessador de ponto flutuante in 1976.[33][34] William Morton Kahan, atuando como consultor da Intel, sugeriu que a Intel utilizasse o ponto flutuante do VAX da Digital Equipment Corporation (DEC). O primeiro VAX, o VAX-11/780, tinha acabado de ser lançado no final de 1977, e o seu ponto flutuante era muito bem conceituado. Os formatos de ponto flutuante do VAX diferiam do MBF apenas pelo fato de possuírem o sinal no bit mais significativo.[35][36] No entanto, buscando comercializar o seu chip para o mercado mais amplo possível, solicitou-se a Kahan que elaborasse as especificações.[33] Quando os rumores sobre o novo chip da Intel chegaram aos seus concorrentes, eles iniciaram um esforço de padronização, chamado IEEE 754, para evitar que a Intel ganhasse muito terreno. Como um expoente de 8 bits não era amplo o suficiente para algumas operações desejadas em números de precisão dupla, por exemplo, para armazenar o produto de dois números de 32 bits,[1] a proposta da Intel e uma counter-proposal da DEC utilizaram 11 bits, assim como o consagrado formato de ponto flutuante de 60 bits do CDC 6600 de 1965.[34][37][38] A proposta de Kahan também previa infinitos, que são úteis ao lidar com condições de divisão por zero; valores não numéricos (NaNs), úteis ao lidar com operações inválidas; números subnormais, que ajudam a mitigar os problemas causados pelo transbordo negativo (underflow);[37][39][40] e um viés do expoente melhor equilibrado, que poderia ajudar a evitar o transbordo positivo e o negativo ao obter o recíproco de um número.[41][42]

Na época em que o QuickBASIC 4.00 foi lançado, o padrão IEEE 754 já havia sido amplamente adotado — por exemplo, foi incorporado ao coprocessador 387 da Intel e a todos os processadores x86 a partir do 486. As versões 4.0 e 4.5 do QuickBASIC utilizam variáveis de ponto flutuante IEEE 754 por padrão, mas existe uma opção de linha de comando /MBF para a IDE e para o compilador que alterna de números IEEE para números de ponto flutuante MBF, para oferecer suporte a programas escritos anteriormente que dependem dos detalhes dos formatos de dados MBF. O Visual Basic também utiliza o formato IEEE 754 em vez do MBF.

Detalhes técnicos

editar

Os números MBF consistem em um expoente de 8 bits na base 2, um bit de sinal (mantissa positiva: s = 0; mantissa negativa: s = 1) e uma mantissa de 23,[43][8] 31[8] ou 55 bits[43] do significando. Existe sempre um bit 1 implícito à esquerda da mantissa explícita, e a vírgula binária está localizada antes desse bit presumido. O expoente é codificado com um viés de 128,[43] de modo que os expoentes de −127 a −1 são representados por valores de campo de expoente de 1 a 127 e os expoentes de 0 a 127 são representados por valores de 128 a 255, com um caso especial para o valor de campo igual a 0 representando que o número inteiro é zero.

O formato de precisão dupla MBF fornece menos escala do que o formato IEEE 754 e, embora o formato em si forneça quase um dígito decimal extra de precisão, na prática os valores armazenados são menos precisos porque os cálculos IEEE utilizam resultados intermediários de 80 bits, o que o MBF não faz.[1][3][43][44] Ao contrário do ponto flutuante IEEE, o MBF não suporta números subnormais, infinitos ou NaNs.[45]

Formato de precisão simples MBF (32 bits, "BASIC de 6 dígitos"):[43][8]

Expoente Sinal Significando
Bit 31...24
(8 bits)
Bit 23
(1 bit)
Bit 22...0
(23 bits)
xxxxxxxx s mmmmmmm mmmmmmmm mmmmmmmm

Formato de precisão estendida MBF (40 bits, "BASIC de 9 dígitos"):[8]

Expoente Sinal Significando
Bit 39...32
(8 bits)
Bit 31
(1 bit)
Bit 30...0
(31 bits)
xxxxxxxx s mmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm

Formato de precisão dupla MBF (64 bits):[43][1]

Expoente Sinal Significando
Bit 63...56
(8 bits)
Bit 55
(1 bit)
Bit 54...0
(55 bits)
xxxxxxxx
 
s
 
mmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm
mmmmmmmm mmmmmmmm mmmmmmmm

Exemplos

editar
Exemplos Formato de 32 bits Formato de 40 bits Ref.
1084h, 20h, 00h, 00h84h, 20h, 00h, 00h, 00h[46][8]
282h, 00h, 00h, 00h82h, 00h, 00h, 00h, 00h
181h, 00h, 00h, 00h81h, 00h, 00h, 00h, 00h[46][8]
000h, 00h, 00h, 00h00h, 00h, 00h, 00h, 00h[43]
0.580h, 00h, 00h, 00h80h, 00h, 00h, 00h, 00h[46][8]
0.257Fh, 00h, 00h, 00h7Fh, 00h, 00h, 00h, 00h[47][8]
−0.580h, 80h, 00h, 00h80h, 80h, 00h, 00h, 00h[46][8]
raiz(0.5)80h, 35h, 04h, F3h80h, 35h, 04h, F3h, 34h[46][8]
raiz(2)81h, 35h, 04h, F3h81h, 35h, 04h, F3h, 34h[46][8]
ln(2)80h, 31h, 72h, 18h80h, 31h, 72h, 17h, F8h[46][8]
log2(e)81h, 38h, AAh, 3Bh81h, 38h, AAh, 3Bh, 29h[46][8]
π/281h, 49h, 0Fh, DBh81h, 49h, 0Fh, DAh, A2h[47][8]
2π83h, 49h, 0Fh, DBh83h, 49h, 0Fh, DAh, A2h[47][8]

Veja também

editar

Referências

editar
  1. a b c d «IEEE vs. Microsoft Binary Format; Rounding Issues (Complete)». Microsoft Support. Microsoft. 21 de novembro de 2006. Cópia arquivada em 19 de janeiro de 2025 
  2. «(Complete) Tutorial to Understand IEEE Floating-Point Errors». Knowledge Base. Microsoft. 16 de agosto de 2005 
  3. a b «Convert pre-IEEE-754 C++ floating-point numbers to/from C#». stackoverflow.com. 21 de abril de 2010. Cópia arquivada em 7 de outubro de 2025 
  4. «The MASM 6.1 documentation notes that 5.1 was the last MASM version to support MBF» (PDF). people.sju.edu 
  5. GW-BASIC User's Manual, Appendix D.3 USR Function Calls.
  6. BASIC Second edition (May 1982), IBM: Appendix C-15.
  7. «ROM Routes (Integer Math)». Trs-80.com. Cópia arquivada em 11 de setembro de 2019 
  8. a b c d e f g h i j k l m n o p q r Steil, Michael (20 de outubro de 2008). «Create your own Version of Microsoft BASIC for 6502». pagetable.com. Cópia arquivada em 6 de maio de 2026 
  9. a b c d e Isaacson, Walter (20 de setembro de 2013). «Dawn of a revolution». Harvard Gazette. Cópia arquivada em 14 de maio de 2026 
  10. Rall, Louis B. (1987). «An introduction to the scientific computing language Pascal-SC». Pergamon Journals Ltd. Computers & Mathematics with Applications. 14 (1): 53–69. doi:10.1016/0898-1221(87)90181-7 
  11. Leung, K. Ming (3 de fevereiro de 2005). «Floating-Point Numbers in Digital Computers» (PDF). cis.poly.edu 
  12. Becraft, Michael B. (26 de agosto de 2014). Bill Gates: A Biography. [S.l.]: Abc-Clio. ISBN 978-1-44083014-3. Cópia arquivada em 7 de outubro de 2025 
  13. «The Math Package». altairbasic.org. 2014. Cópia arquivada em 7 de outubro de 2025 
  14. Orlowski, Andrew (11 de maio de 2001). «Microsoft Altair BASIC legend talks about Linux, CPRM and that very frightening photo - A very rare interview with Monte Davidoff». The Register. Cópia arquivada em 28 de dezembro de 2019 
  15. a b Orlowski, Andrew (13 de maio de 2001). «Raiders of the Lost Altair BASIC Source Code - They came, they saw … they disassembled». The Register. Cópia arquivada em 31 de março de 2020 
  16. a b Griffiths, Ian (8 de maio de 2000). «Quest for the Holy Source - Ian's trip to Harvard». Cópia arquivada em 14 de setembro de 2020 
  17. «Great people personally responsible for advancing the art of early computers». Oldcomputers.net. 18 de julho de 2020 
  18. «Basic 7.0 for Windows». comp.lang.basic.powerbasic.narkive.com. Cópia arquivada em 7 de outubro de 2025 
  19. Radio Shack Hardware Manual: Level II BASIC Reference Manual 1 ed. Fort Worth, Texas: Radio Shack. 1978 
  20. Level II BASIC Reference Manual. akhara.com. [S.l.]: Radio Shack. 1979. Cópia arquivada em 16 de junho de 2022 
  21. BASIC-80 (MBASIC) Reference Manual. [S.l.: s.n.] 
  22. Microsoft FORTRAN-80 Version 3.4 Users Manual (PDF). textfiles.com. [S.l.: s.n.] Novembro 1980. pp. 45, 55. Cópia arquivada (PDF) em 27 de setembro de 2021 
  23. Pätzold, Michael (abril 1993). «Zettelsammlung MS-DOS und AT» (em alemão). Gruppe Datenverarbeitung am MPI für Strömungsforschung Göttingen, Max-Planck-Institut 
  24. «Tandy 200 Multiplan Manual» (PDF). classiccmp.org. Cópia arquivada (PDF) em 14 de setembro de 2020 
  25. Microsoft C Pcode Specifications, page 13.
  26. Microsoft COBOL-80 (PDF). textfiles.com. [S.l.: s.n.] 1978. pp. 26, 32. Cópia arquivada (PDF) em 29 de outubro de 2019 
  27. Lee, Patrick Y. «QWK Mail Packet File Layout». textfiles.com. Cópia arquivada em 15 de novembro de 2025 
  28. «CSI Millennium (CSIM) format with CSI Y2K extensions». csidata.com. Boca Raton, Florida: Commodity Systems, Inc. 17 de novembro de 1998. Cópia arquivada em 5 de março de 2016 
  29. Billard, Russ (4 de maio de 2016). «Converting Microsoft Binary Format to IEEE format Using VB 6». Cópia arquivada em 23 de janeiro de 2025 
  30. JerMyster (2 de julho de 2003). «Help !Anybody know how to convert old M/S MBF value from Qbasic to VB6». Tek-Tips. Visual Basic (Classic) Forum. Cópia arquivada em 17 de setembro de 2020 
  31. GL88. «Reading Binary Format (QBasic) with C#». Social.msdn.microsoft.com. Cópia arquivada em 17 de setembro de 2020 
  32. «Rmetrics - Reading MetaStock data format in R». R.789695.n4.nabble.com. 30 de setembro de 2013. Cópia arquivada em 17 de setembro de 2020 
  33. a b «Intel and Floating-Point - Updating One of the Industry's Most Successful Standards - The Technology Vision for the Floating-Point Standard» (PDF). Intel. 2016. Cópia arquivada (PDF) em 3 de dezembro de 2025 
  34. a b «An Interview with the Old Man of Floating-Point». cs.berkeley.edu. 20 de fevereiro de 1998. Cópia arquivada em 12 de maio de 2016 
  35. «VAX Floating Point Numbers». nssdc.gsfc.nasa.gov. Cópia arquivada em 14 de maio de 2025 
  36. «VAX11 780» (PDF). Ece.cmu.edu 
  37. a b «IEEE 754: An Interview with William Kahan» (PDF). dr-chuck.com. Cópia arquivada (PDF) em 17 de março de 2026 
  38. Thornton, James E. (1970). Design of a Computer: The Control Data 6600 (PDF) 1 ed. [S.l.]: Scott, Foresman and Company 
  39. Kahan, William Morton. «Why do we need a floating-point arithmetic standard?» (PDF). cs.berkeley.edu. Cópia arquivada (PDF) em 29 de março de 2016 
  40. Kahan, William Morton; Darcy, Joseph D. «How Java's Floating-Point Hurts Everyone Everywhere» (PDF). cs.berkeley.edu. Cópia arquivada (PDF) em 4 de março de 2016 
  41. Turner, Peter R. (21 de dezembro de 2013). Numerical Analysis and Parallel Processing: Lectures given at The Lancaster …. [S.l.]: Springer. ISBN 978-3-66239812-8. Cópia arquivada em 7 de outubro de 2025 
  42. «Names for Standardized Floating-Point Formats» (PDF). cs.berkeley.edu. Cópia arquivada (PDF) em 10 de setembro de 2014 
  43. a b c d e f g Borland staff (2 de julho de 1998). «Converting between Microsoft Binary and IEEE formats». Technical Information Database. Embarcadero USA / Inprise. Cópia arquivada em 18 de janeiro de 2023 
  44. «Google Groups». Groups.google.com. Cópia arquivada em 21 de maio de 2026 
  45. Bucknall, Julian M. (3 de novembro de 2018). «Understanding single precision MBF». boyet.com. Cópia arquivada em 15 de agosto de 2018 
  46. a b c d e f g h Steil, Michael (20 de outubro de 2008). «msbasic/float.s». MIST64. Cópia arquivada em 7 de outubro de 2025 – via github.com 
  47. a b c Steil, Michael (20 de outubro de 2008). «msbasic/trig.s». MIST64. Cópia arquivada em 7 de outubro de 2025 – via github.com 

Leitura adicional

editar

Ligações externas

editar

📚 Artikel Terkait di Wikipedia

Formato de arquivo

de texto do Microsoft Word .PDF - documento do Acrobat Adobe .TXT - arquivos de texto comum. Conti, Fatima. «Arquivos/Programas e formatos. Software livre

Formato decimal128 de ponto flutuante

Na computação, o decimal128 é um formato de número de ponto flutuante decimal que ocupa 128 bits na memória. Introduzido oficialmente no IEEE 754-2008

Formato decimal32 de ponto flutuante

compreender a codificação do decimal32: Codificação BID vs. DPD: a BID (binary integer decimal) utiliza um valor inteiro positivo para o significando,

Mitigação de erros de ponto flutuante

consideravelmente mais lentas do que as instruções de ponto flutuante de formato de comprimento fixo. Quando o alto desempenho não é um requisito, mas a

Formato de ponto flutuante de precisão quádrupla

arquivada (PDF) em 1 de julho de 2021  «Implementor support for the binary interchange formats». IEEE. Cópia arquivada em 11 de junho de 2011  The SPARC Architecture

Aritmética de precisão arbitrária

de Toom-Cook dotnet-bot. «BigInteger Struct (System.Numerics)». docs.microsoft.com. Consultado em 22 de fevereiro de 2022  «PEP 237 -- Unifying Long

Formato de ponto flutuante bfloat16

O formato de ponto flutuante bfloat16 (brain floating point, ou ponto flutuante cerebral) é um formato de número de computador que ocupa 16 bits na memória

.doc

para documentos de processamento de texto, mais comum no Microsoft Word Binary File Format. Historicamente, foi usado para documentação em texto simples