Зарождая новый срач возвращаясь к проблеме. Да: float - тот ещё подарочек. Но Blitz, к прочему, выводит его в потоки (в файл или на экран) обрезано. Выполним вот такой вот код:
Local x#=14.143+0.000001
DebugLog "In Blitz3D my float printed as "+Str(x)
For L=1 To 20
DebugLog GetMyFloat(x,L)
Next
WaitKey()
End
И в лог отладчика мы получим следующее:
In Blitz3D my float printed as 14.143
|
Ну это-то ожидаемо. Флоат же - ерунда.
На самом деле: и флоата хватает и блитц всё посчитал правильно - далее в логе читаем:
14.1
14.14
14.143
14.1430
14.14300
14.143001
14.1430006
14.14300060
14.143000603
14.1430006027
14.14300060272
14.143000602722
14.1430006027222
14.14300060272217
14.143000602722168
14.1430006027221680
14.14300060272216797
14.143000602722167969
14.1430006027221679688
14.14300060272216796875
|
Спасибо, Марк, за фиксированную низкую точность вывода!
А это значит, что float(str(x)) - непоправимая потеря точности.
Арифметические результаты не отличаются от аналогичных в MinGW (включая мусор на младших разрядах при излишней точности).