- 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