Вопрос по VB

C++, Assembler, PHP и т.д. и т.п...

Модератор: Tiger

Fiskars
Сообщения: 40
Зарегистрирован: Пн 18 окт, 2004 19:35

Вопрос по VB

Сообщение Fiskars » Вс 25 ноя, 2007 22:31

подскажите, почему функции Cstr и Val из точки делают запятую, что приводит полученные данные в негодность?
то есть получается

Val("3.5")=3,5
Cstr(3.5)="3,5"

в итоге Val(CStr(3.5))=3

как же с этим бороться? нужны точные разультаты

Fiskars
Сообщения: 40
Зарегистрирован: Пн 18 окт, 2004 19:35

Сообщение Fiskars » Пн 26 ноя, 2007 0:03

и ещё, как бороться с результатами выражений наподобие
a=2.4-2.2

когда после вычислений а становится равно 0.19999999
почему не 0.2 ?

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Пн 26 ноя, 2007 1:38

Fiskars писал(а):и ещё, как бороться с результатами выражений наподобие
a=2.4-2.2

когда после вычислений а становится равно 0.19999999
почему не 0.2 ?
В математике число вещественных чисел безконечно и счётно, но считаются они очень хитрым способом, в компьютерах нет ничего безконечного и поэтому в компьютере можно представить только небольшую часть вещественных чисел. Та проблема о которой вы спрашиваете называется проблемой вещественных вычислений, самое распространённое решение отказаться от точных сравнений. К примеру, сказать что числа считаются равными, если абсолютное значение разности этих чисел > 10^{-5}. Иными словами в программе написать не
IF a = 0.2 THEN ? "Privet";
а
IF abs(a-0.2)>0.000001 THEN ? "Privet";
Удобно число признаное точностью вычислений выносить в константы в начале программы.
С уважением Tiger.


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость