zmiennoprzecinkowa notacja własna (kod "wewnętrzny") czy ktoś słyszał o takiej notacji i wytłumaczy o co chodzi i jak ją zapisać?
Ale w sensie że chcesz zaimplementować liczby zmiennoprzeciekowe na architekturze która natywnie nie wspiera licz zmiennoprzecinkowych?
KamilAdam napisał(a):
Ale w sensie że chcesz zaimplementować liczby zmiennoprzeciekowe na architekturze która natywnie nie wspiera licz zmiennoprzecinkowych?
tak, które nie mają wbudowanego koprocesora operacji zmiennopozycyjnych
Kompilator SDCC (Small Device C Compiler) wykorzystuje gotowe biblioteki implementujące liczby zmiennoprzecinkowe float
, ponieważ procesory, na które kompiluje kod, nie wspierają liczb zmiennoprzecinkowych. Te biblioteki powinny być zaimplementowane w plikach nagłówkowych instalowanych razem z tym kompilatorem.
Warto też, moim zdaniem, solidnie rozważyć wykorzystanie positów zamiast IEEE 754 („normalnych” floatów), skoro i tak trzeba coś implementować od zera.
Rozwiązań jest całą masa, wszystko zalezy od tego:
- Czy chcesz żeby to było rozwiązanie tylko teoretyczne do zaprezentowania na studia?
- Czy będziesz miał potrzebę to samodzielnie zaimplementować? A jeśli tak to czy:
- Chcesz precyzyjne liczby zmienno przecinkowe działające w maksymalnie dużym zakresie i maksymalnie precyzyjne?
- Czy chcesz szybkie liczby zmienno przecinkowe działające w jakimś wąskim zakresie? (embedded procesory często są wolne i trzeba preferować szybkość nad precyzję)
Jak kiedyś przeglądałem sposoby implementacji liczb zmienno przecikowych to oprócz klasycznego IEEE_754 znalazłem jeszcze:
- Decimal floating point - nowy fragment IEEE_754, może być łatwiej zaimplementować konwersje
- FLIP, a Floating-Point Library for Integer Processors - cały czas zbieram się żeby to przeczytać i może kiedyś zaimplementować w swoim pet kompilatorze
- Real48 - odszukać więcej informacji o typie real 48. Był używany w starym Pascalu w czasach przed koprocesorem, ale przeglądając bardzo stare kody w C widziałem że były na ten typ makra porobione. Nazwa nawiązuje do tego że tym zajmował 48 bitów (6 bajtów). Chyba 16 bitów na wykładnik i 32 bity na mantyse