March 18th, 2013

voron

ни фига себе

Можете называть меня ретроградом, но простые утилитки для себя я пишу на VB6 потому что я больше ни на чем не умею он простой, я в два движения мышью делаю GUI и после компиляции получается крохотная exe-шка в 50 килобайт, которая не требует никаких дополнительных dll-ок или какого-нибудь монструозного runtime environment'а.

Ну так вот: я только что обнаружил, что он делает ошибку в простых матеметических операциях. Например, после исполнения вот такого кода

For x = 1 To 2000
a = a + 0.001
Next x

переменная a должна, естественно, принять значение = 2 (разумеется, она была обнулена перед циклом).

А получается 2.000037 если a была объявлена как "single" или 1.99999999999989, если была "double". Чем больше раз повторять сложение, тем бОльшая ошибка накапливается.

Проблема фиксится добавлением функции Val() вокруг сложения и объявлением переменной как "double".

Нет, я понимаю, когда ошибка в -дцатом знаке возникает при возведении в дробную степень или там вычислении логарифма какого. Но простое сложение?

Век живи - век учись.