Курс языка программирования Raku / Основы / Основы переменных и типов данных / Числа

Рациональные числа

Рациональные числа — это уникальная особенность Raku. Такие числа представлены типом данных Rat.

Внутри Raku рациональные числа являются дробями с двумя целыми частями: числитель и знаменатель. Поэтому вы можете с легкость представить такие числа, как 1/3, без потери точности.

Есть несколько способов записи числа Rat в программе Raku:

my $x = 1/2;
my $y = <2/3>;

Отметим, что косая черта здесь является частью нотации. Это не оператор деления, поэтому 1/2 не означает деление 1 на 2. Хотя при печати рациональные числа показаны как десятичные числа или целые:

say 1/2; # 0.5
say 3/4; # 0.75

Часть строки после знака # является комментарием, который игнорируется компилятором. Такие комментарии будут использованы в этом курсе, чтобы показать вывод программы.

Десятичная форма

Важно понимать, что когда вы записываете число в десятичной форме, например 0.5, Raku создает число типа Rat. Это не целое число, но и не число с плавающей точкой (float или double в других языках). Это все еще рациональное число!

Давайте посмотрим на следующий пример:

say 0.1 + 0.2 - 0.3;

Если язык программирования использует арифметику с плавающей точкой для таких вычислений, результат не будет равен 0. На сайте 0.30000000000000004.com приведен исчерпывающий список примеров, когда арифметика с плавающей точкой не дает ожидаемый результат.

Но Raku выведет ровно 0. Так получается, потому что числа 0.1, 0.2 и 0.3 являются рациональными числами, и Raku хранит их внутри как 1/10, 2/10 и 3/10. Запустите следующее из командной строки, чтобы удостовериться в этом:

$ raku -e 'say 0.1 + 0.2 - 0.3'
0

Символы Юникода

В качестве дробей также возможно использовать символы Юникода, такие как ½, ¼ или ¾. Наверное, такие дроби не всегда легко набрать с клавиатуры, но они полностью соответствуют своим ASCII альтернативам, записанным как дробь или как десятичное число:

½ | 1/2 | <1/2> | 0.5 ¼ | 1/4 | <1/4> | 0.25 ¾ | 3/4 | <3/4> | 0.75

С некоторыми дробями, как например 1/3, у вас меньше опций, только или <1/3>, так как десятичная форма бы требовала бесконечное количество цифр.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Тест: Цифры и числа в Юникоде   |   Тест: Рациональные числа


💪 Или перейдите сразу к упражнениям этого раздела.