in x86 Assembly

Hi, knight-errant,

How to get the 200th Fibonacci number F(200)? I don't know how to estimate its lenth, and where to put the very big number. so no way to go on...

F(n)=F(n-1) + f(n-2) where f(0)= 0, f(1)= 1

Thank you for your time.

Jia

How to get the 200th Fibonacci number F(200)? I don't know how to estimate its lenth, and where to put the very big number. so no way to go on...

F(n)=F(n-1) + f(n-2) where f(0)= 0, f(1)= 1

Thank you for your time.

Jia

It looks like you're new here. If you want to get involved, click one of these buttons!

- 140.8K All Categories
- 103.6K Programming Languages
- 6.4K Assembler Developer
- 401 Assembly Code Share
- 239 Getting started in assembly
- 4.6K x86 Assembly
- 1.9K Basic
- 97 Qbasic
- 39.9K C and C++
- 5.6K Beginner C/C++
- 330 C/C++ on Linux/Unix
- 450 C/C++ Windows API
- 522 C++ Builder
- 253 C++ Game Development
- 3.3K C++ MFC
- 103 C++.NET
- 404 Visual C++
- 2.9K C#
- 7.9K Delphi and Kylix
- 334 Advanced Delphi
- 360 Delphi beginners
- 4 Haskell
- 9.7K Java
- 56 Enterprise JavaBeans
- 1.3K Java Beginners
- 304 Java Server Pages
- 4.1K Pascal
- 1.3K Perl
- 11 Perl 6
- 2K PHP
- 546 Python
- 37 Ruby
- 4.4K VB.NET
- 258 Advanced VB.Net
- 1.6K VBA
- 20.8K Visual Basic
- 767 Access databases and VB
- 831 Advance Visual Basic
- 1.2K Beginner VB
- 2.6K Game programming
- 315 Console programming
- 90 DirectX Game dev
- 1 Minecraft
- 112 Newbie Game Programmers
- 2 Oculus Rift
- 9K Applications
- 1.8K Computer Graphics
- 279 3D Graphics
- 129 DirectX
- 125 OpenGL
- 740 Computer Hardware
- 9 Cooling & Overclocking
- 3.4K Database & SQL
- 1.1K Access
- 91 ADO Programming
- 288 MySQL
- 358 Oracle
- 440 SQL-Server
- 535 Electronics development
- 1.6K Matlab
- 628 Sound & Music
- 25 DirectSound
- 257 XML Development
- 3.3K Classifieds
- 199 Co-operative Projects
- 198 For sale
- 190 FreeLance Software City
- 1.9K Jobs Available
- 603 Jobs Wanted
- 209 Wanted
- 2.9K Microsoft .NET
- 1.8K ASP.NET
- 1.1K .NET General
- 22 .NET WEB-Services
- 129 .NET WinForms
- 14 .NET XML
- 50 ADO.NET
- 142 C# & VB.NET School Support
- 3.4K Miscellaneous
- 8 Join the Team
- 354 Comments on this site
- 69 Computer Emulators
- 2.1K General programming
- 187 New programming languages
- 621 Off topic board
- 200 Mobile & Wireless
- 72 Android
- 126 Palm Pilot
- 338 Multimedia
- 154 Demo programming
- 184 MP3 programming
- 0 Bash scripts
- 27 Cloud Computing
- 1 Witsbits Go Cloud
- 53 FreeBSD
- 1.7K LINUX programming
- 1 Awk scripting
- 332 Linux Support
- 0 Sed scripting
- 370 MS-DOS
- 0 Shell scripting
- 321 Windows CE & Pocket PC
- 4.1K Windows programming
- 177 COM/DCOM
- 61 Networking And Security
- 17 Windows 2003 Server
- 6 Windows Vista
- 176 Windows XP
- 939 Software Development
- 416 Algorithms
- 68 Object Orientation
- 24 RUP & UML
- 91 Project Management
- 95 Quality & Testing
- 268 Security
- 63 Evil Scripting
- 81 Hacking
- 7.7K WEB-Development
- 1.8K Active Server Pages
- 61 AJAX
- 4 Bootstrap Themes
- 55 CGI Development
- 28 ColdFusion
- 224 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 131 Mobile Internet & Messaging
- 211 Wireless development
- 2.2K JavaScript
- 37 JQuery
- 304 WEB Servers
- 153 Apache
- 79 IIS
- 150 WEB-Services / SOAP

## Comments

:

: How to get the 200th Fibonacci number F(200)? I don't know how to estimate its lenth, and where to put the very big number. so no way to go on...

: F(n)=F(n-1) + f(n-2) where f(0)= 0, f(1)= 1

:

: Thank you for your time.

:

: Jia

:

I created a program that calculates basically any fibinacci number. It probably won't work for fib(10000000), but it does work for fib(200). My program was made in Delphi and it wasn't easy.

I could send you the source, if you want.

What I did was basically make a new type of number. This new type was actually a dynamic array of word. I made some functions to store normal integer values into the array. I also made a function that could add 2 of these arrays together. The actual fibinocci function was programmed a lot like a normal fibinocci function based on integer math except that it called my functions to add the values together.

Also, there was a function to convert the values in the array to hexidecimal to display the result.

The way the adding worked, was in a loop from the lowest order part of the number to the highest order, simply adding each word at a time. If the sum of 2 words was greater than FFFFh, a 1 was carried to the next addition.

ps: the 200th fibinocci number is 017903BD1BD927DC58766E6533A576B3F1535622h

: :

: : How to get the 200th Fibonacci number F(200)? I don't know how to estimate its lenth, and where to put the very big number. so no way to go on...

: : F(n)=F(n-1) + f(n-2) where f(0)= 0, f(1)= 1

: :

: : Thank you for your time.

: :

: : Jia

: :

:

: I created a program that calculates basically any fibinacci number. It probably won't work for fib(10000000), but it does work for fib(200). My program was made in Delphi and it wasn't easy.

:

: I could send you the source, if you want.

:

: What I did was basically make a new type of number. This new type was actually a dynamic array of word. I made some functions to store normal integer values into the array. I also made a function that could add 2 of these arrays together. The actual fibinocci function was programmed a lot like a normal fibinocci function based on integer math except that it called my functions to add the values together.

:

: Also, there was a function to convert the values in the array to hexidecimal to display the result.

:

: The way the adding worked, was in a loop from the lowest order part of the number to the highest order, simply adding each word at a time. If the sum of 2 words was greater than FFFFh, a 1 was carried to the next addition.

:

Basically, that's what you need to do. You need to use arbitrary/extended precision calculation. As the Art of Assembly (webster.ucr.edu) already has a good section on extended precision arithmetic at the assembly level, I'll simply refer you to that. On a side note, I'd recommend the iterative version of the fibonacci sequence is very straightforward and it isn't exponential in complexity (it's linear). There actually is an even better method that's only logarithmic in time complexity, but it isn't as straightforward (and while it isn't that complex, you don't really need it here). Outputting in hexadecimal isn't hard at all from that, outputting decimal is more difficult because the first digit potentially depends on the last digit (whereas hexadecimally no digit depends on any other digit). This is an artifact of using "digits" that are base an integer power of 16 (you'll likely be using base 2^32 or 2^16 "digits" which are an integer power of 16 (2^32=16^8 2^16=16^4).)

As a note to Josh Code, if you implement the code the way you describe it then you can easily make it as simple to output in decimal as it is to output in hexadecimal now simply use "digits" that are based on an integer power of 10, i.e. "carry" if x is less than 10,000 (or any other power of ten you feel like). Then printing out each "digit" separately in decimal will be the same as printing the whole number in decimal.

"We can't do nothing and think someone else will make it right."

-Kyoto Now, Bad Religion

Thank you for your detailed explanations.

I got the Josh's idea, I try to use the "dynamic array" concept in my assembly coding, but I don't know Delphi, if it's not that difficult to read the code, I'd like to have a look at it.

Darius's idea is very attractive, I need some time to think it over. Are you sure the web address :"webster.ucr.edu" is right?

Thanks a lot!

: : : Hi, knight-errant,

: : :

: : : How to get the 200th Fibonacci number F(200)? I don't know how to estimate its lenth, and where to put the very big number. so no way to go on...

: : : F(n)=F(n-1) + f(n-2) where f(0)= 0, f(1)= 1

: : :

: : : Thank you for your time.

: : :

: : : Jia

: : :

: :

: : I created a program that calculates basically any fibinacci number. It probably won't work for fib(10000000), but it does work for fib(200). My program was made in Delphi and it wasn't easy.

: :

: : I could send you the source, if you want.

: :

: : What I did was basically make a new type of number. This new type was actually a dynamic array of word. I made some functions to store normal integer values into the array. I also made a function that could add 2 of these arrays together. The actual fibinocci function was programmed a lot like a normal fibinocci function based on integer math except that it called my functions to add the values together.

: :

: : Also, there was a function to convert the values in the array to hexidecimal to display the result.

: :

: : The way the adding worked, was in a loop from the lowest order part of the number to the highest order, simply adding each word at a time. If the sum of 2 words was greater than FFFFh, a 1 was carried to the next addition.

: :

:

: Basically, that's what you need to do. You need to use arbitrary/extended precision calculation. As the Art of Assembly (webster.ucr.edu) already has a good section on extended precision arithmetic at the assembly level, I'll simply refer you to that. On a side note, I'd recommend the iterative version of the fibonacci sequence is very straightforward and it isn't exponential in complexity (it's linear). There actually is an even better method that's only logarithmic in time complexity, but it isn't as straightforward (and while it isn't that complex, you don't really need it here). Outputting in hexadecimal isn't hard at all from that, outputting decimal is more difficult because the first digit potentially depends on the last digit (whereas hexadecimally no digit depends on any other digit). This is an artifact of using "digits" that are base an integer power of 16 (you'll likely be using base 2^32 or 2^16 "digits" which are an integer power of 16 (2^32=16^8 2^16=16^4).)

:

: As a note to Josh Code, if you implement the code the way you describe it then you can easily make it as simple to output in decimal as it is to output in hexadecimal now simply use "digits" that are based on an integer power of 10, i.e. "carry" if x is less than 10,000 (or any other power of ten you feel like). Then printing out each "digit" separately in decimal will be the same as printing the whole number in decimal.

:

: "We can't do nothing and think someone else will make it right."

: -Kyoto Now, Bad Religion

:

:

Read here Fibonacci Series using recursion C Programming