Целые числа и числа с плавающей точкой
В Scilab числовая переменная по умолчанию имеет тип вещественного числа с плавающей точкой, для представления которого в памяти используется 64 бита. Даже если при создании переменной ей присваивается целое значение, переменная будет иметь тип с плавающей точкой. На практике целые значения в интервале [—252, 252] можно без особых опасений хранить в вещественных переменных, так как Scilab в этом случае гарантирует точность выполнения операций. Например, в следующем фрагменте мы производим точное сложение двух больших целых чисел, лежащих в пределах интервала [—252, 252] и убеждаемся, что потери точности не происходит:
-->а =2^40 - 12
а =
1099511627764.
-->b =2^45 + 3
b =
35184372088835.
-->с = а + b
с =
36283883716599 .
Если же в ходе вычислений значение выходит за пределы указанного интервала, результаты могут быть весьма неожиданными. Например, как демонстрирует следующий фрагмент, при работе с величинами, превышающими 253, полученное значение оказывается четным независимо от значений операндов:
-->(2 - 53 + (1 : 10)) '
ans =
9007199254740992. 9007199254740994. 9007199254740996. 9007199254740996. 9007199254740996. 9007199254740998. 9007199254741000. 9007199254741000. 9007199254741000. 9007199254741002.
В следующем примере мы вычислим значение 252, с использованием арифметики с плавающей точкой и 16-битных целых чисел. В первом случае переполнения не происходит, даже несмотря на то, что значение находится на границе диапазона 64-битных чисел с плавающей точкой. Напротив, во втором случае результат оказывается неверным, так как значение 252, непредставимо в рамках 16 бит.
-->2 ^ 52
ans =
4503599627370496.
-->uintl6(2 ^ 52)
ans =
0