- Komenda WHO wyświetla informację o autorze programu.
- Wykrzyknik pozwala wprowadzać komentarze do programu.
Wszystkie znaki po wykrzykniku aż do końca wiersza są ignorowane.
Wiersze zawierające tylko komentarz (tzn. zaczynające się wykrzyknikiem) nie są dozwolone.
Przykład:
10 A=1!To jest komentarz
- Komenda SET akceptuje składnię SET N, która kasuje ograniczenie precyzji wyświetlania liczb.
- Kod błędu ERR! sygnalizuje błędy w argumentach funkcji w nawiasach.
Przykład:
SIN (0/0)
TAN (1>0)
- Komenda DEFM po której następuje przecinek i nazwa zmiennej przypisuje tej zmiennej maksymalną ilość możliwych do zarezerwowania dodatkowych zmiennych.
Ta opcja działa tylko w programach.
Przykład:
10 DEFM ,A
20 PRINT "Max=";A
- Niektóre komendy akceptujące zmienną jako argument zezwalają na użycie zarówno samej nazwy zmiennej, jak i zmiennej z przypisaną wartością.
Na przykład, poniższy dziwny program jest wykonywany bez zgłaszania błędów:
10 PRINT A=123;B$="ABC"
20 INPUT C=5,D$="DEF"
30 SET K=2
40 DEFM ,M=3
50 I=3
60 FOR I TO 5
70 NEXT I=10
80 GOTO X=10
- Komputer MK-85 nie ma nic przeciwko porównywaniu liczby z łańcuchem.
Wybiera pomiędzy procedurą porównywania łańcuchów lub liczb testując tylko wyrażenie po prawej stronie operatora relacji.
Bez problemów wykonuje poniższy przykładowy program:
10 A=1: $="ABC"
20 IF A=$ THEN 30
30 IF $>5 THEN 40
40 END
- Procedura łączenia łańcuchów nie spodziewa się wyniku połączenia łańcuchów jako drugiego argumentu.
Poniższe przykładowe wyrażenie jest obliczane źle:
"12"+("34"+"56")
- Ten sam obszar pamięci został zarezerwowany dla bufora łączonych łańcuchów i dla stosu przetwarzania wyrażeń.
Czasem ten stos może zostać przepisany przez łańcuch, co prowadzi do różnych komunikatów o błędach.
Taki przypadek zachodzi w poniższym przykładzie:
$="123456789012345"
LEN($+$)
- INPUT nie sprawdza, czy wartość wpisywana do zmiennej numerycznej jest rzeczywiście liczbą, co powoduje zamazanie zmiennej śmieciami.
Spróbuj wpisać jakiś łańcuch (w cudzysłowach) lub zmienną łańcuchową (np. $) w odpowiedzi na INPUT w poniższym programie:
10 VAC
20 INPUT A
30 PRINT A$
- INPUT nie potrafi wpisać pustego łańcucha do zmiennej łańcuchowej.
Problem spowodowany jest brakiem testu długości łańcucha przed przekopiowaniem go do zmiennej.
Przykład:
10 INPUT $
Gdy pojawi się znak zapytania, wciśnij kolejno klawisze [SPC], strzałka w lewo, [DEL] i [EXE].
Spowoduje to zawieszenie systemu i utratę zawartości pamięci RAM.
Ten błąd zgłosił Sergei Gaidukov na forum iXBT Hardware BBS, data wpisu 22.11.2005 09:45.
- Z powodu niepełnego sprawdzania typów danych, komenda INPUT akceptuje jako argument liczbę zamiast zmiennej łańcuchowej.
Wpisany łańcuch zostanie zapamiętany pod adresem utworzonym z pierwszych czterech cyfr mantysy.
W poniższym przykładzie zmienna $ zostanie przepisana znakami wpisanymi w odpowiedzi na INPUT:
10 $="0123456789"
20 INPUT 8150
30 PRINT $
- Kolejny błąd komendy INPUT, który zgłosił Denis Gorbunov w księdze gości witryny mk85.narod.ru (data wpisu 09.01.2003 00:20), ilustruje poniższy program umieszczony w obszarze P0:
1 INPUT A$:HH
Wciśnięcie klawisza [AC] a następnie [EXE] w odpowiedzi na znak zapytania wyświetlony przez INPUT spowoduje zawieszenie systemu.
Znaki różne od HH mogą powodować inne awarie, np. restart systemu lub uszkodzenie zawartości pamięci.
Autor wpisu trafnie wywnioskował, że dalsza część programu BASIC rozpoczynająca się od dwukropka jest wykonywana przez procesor jako program maszynowy!
- Instrukcja LETC nie może być używana wewnątrz podprogramu, ponieważ przepisuje pierwszy bajt stosu GOSUB.
Na przykład, próba wykonania RETURN w poniższym programie kończy się błędem:
10 GOSUB 30
20 END
30 LETC "2222222"
40 RETURN
Ten błąd znalazł Aleksei Akatov.
- Operacje mnożenia i dzielenia mogą zwracać małe liczby nie mieszczące się w dozwolonym zakresie, w przedziale 1E-4097..9.999999999E-4097 (wykładnik=0x0000) lub -1E-4097..-9.999999999E-4097 (wykładnik=0x8000), bez sygnalizacji niedomiaru.
Przykład:
A=1E-4096/2
B=-1E-4096*0.1
System nie radzi sobie z takimi liczbami.
Na przykład zmienna A (a także A+A lub A-A) jest wyświetlana jako 5, ale większość operacji arytmetycznych traktuje ją jako 0.
- Obliczenie tangensa (lub innej funkcji pochodzącej od tangensa, tzn. SIN, COS) z liczby o wykładniku równym 4094 zajmuje bardzo dużo czasu.
Dla tak dużych argumentów wynik jest oczywiście bez sensu.
Przykład:
TAN 1E4094
SIN -9E4094
- Liczby zbliżone do całkowitych są nadmiernie zaokrąglane podobnie jak w kalkulatorach Casio, tzn. wynik każdej operacji arytmetycznej poddawany jest następującej obróbce:
- jeżeli cztery ostatnie cyfry mantysy są w przedziale 0001..0009 to zastępowane są 0000
- jeżeli cztery ostatnie cyfry mantysy są w przedziale 9950..9999 to liczba jest zaokrąglana w górę, tak żeby ostatnie cztery cyfry były równe 0000
Przykłady:
Kalkulator wyświetla wprawdzie tylko 10 cyfr, ale przechowuje w pamięci 12 cyfr mantysy.
Można się o tym przekonać np. w następujący sposób:
- wpisujemy do zmiennej A wartość wyrażenia 7+34E-11
- wyświetlając zawartość zmiennej A otrzymujemy wynik 7, dwie ostatnie cyfry mantysy nie zostały pokazane
- wyświetlając wynik obliczenia wyrażenia A-7 otrzymujemy wynik 3.4E-10 ujawniający ukryte cyfry
Powtórzmy ten test dla wpisanej do zmiennej A wartości 7+4E-11.
Obliczając wartość wyrażenia A-7 otrzymujemy 0 zamiast oczekiwanego wyniku 4E-11.
Przeprowadźmy jeszcze dwa testy:
- dla A=7+9934E-11 wartość wyrażenia A-7 wynosi zgodnie z oczekiwaniami 9.934E-8
- natomiast dla A=7+9956E-11 wartość wyrażenia A-7 wynosi niespodziewanie 1E-7