ПОНЯТНО О Visual Basic NET


Single и Double – десятичные дроби - часть 2


Попробуем задать очень маленькое число. Вместо f = 0.000555 напишем:

        f = 0.0000000000000000000000000000000000000000000000000000000000000543

Но VB не любит в дробных числах большого числа нулей и вот, хоть запись и правильная и вполне по зубам типу Double, VB прямо в окне кода укорачивает строку до:

        f = 5.43E-62

Это тоже правильная запись, а что она значит, объяснено чуть позже, в 5.4.7.

Поговорим о точности вычислений. Если вы до сих пор считаете, что компьютер все вычисления выполняет абсолютно точно, то ошибаетесь. Компьютер всего лишь очень точен. Очень, а не абсолютно. И в этом вы скоро убедитесь. Начнем хотя бы с того, что VB не умеет работать с обыкновенными дробями. Он не знает, что такое 1/3, поэтому нам приходится задавать компьютеру вместо числа 1/3 число 0,333333333333. Но это ведь не точная дробь 1/3, а только приблизительное значение. Чтобы она стала точным значением, число знаков после запятой должно быть бесконечным, а такое число не уместится в памяти компьютера. Следовательно, даже теоретически компьютер не может быть абсолютно точен.

Во-вторых, из-за ограниченности типа Double 17 значащими цифрами операции даже над очень точными числами выполняются не совсем точно. Что, например, напечатает такой фрагмент?:

        Dim d, f, g As Double

        d = 123456789

        f = 0.00987654321098765

        g = d + f

        WriteLine(d) : WriteLine(f) : WriteLine(g)

Если вы думаете, что точную сумму 123456789,00987654321098765, то ошибаетесь, так как такое длинное число не уместится в типе Double. А напечатано будет вот что:

123456789

0,00987654321098765

123456789,009877

Десяток цифр из точного значения суммы обрезаны.

Целые литералы VB автоматически относит к типу Integer, а если они слишком длинные для Integer – к типу Long. Дробные литералы VB относит к типу Double. Все это он делает, не особенно обращая внимание на то, что переменные в том же операторе имеют другой тип.




Начало  Назад  Вперед



Книжный магазин