Почему неправильный ответ на этот простой расчет на красном языке

Я пытаюсь напечатать правильное значение простого выражения: (100-55) / (100-75), но всегда получаю 1.0 вместо 1.8. Я пытался:

>> (100 - 55) / (100 - 75)
>> ((100 - 55) / (100 - 75))
>> to-float ((100 - 55) / (100 - 75))
>> probe ((100 - 55) / (100 - 75))
>> print ((100 - 55) / (100 - 75))
>> (divide (subtract 100 55)  (subtract 100 75))

Все они дают значение 1,0 или просто 1, когда правильное значение, очевидно, равно 1,8 (я проверял несколько раз!). В чем проблема?

Изменить: вывод:

>> (100 - 55) / (100 - 75)
== 1
>> ((100 - 55) / (100 - 75))
== 1
>> to-float ((100 - 55) / (100 - 75))
== 1.0
>> probe ((100 - 55) / (100 - 75))
1
== 1
>> print ((100 - 55) / (100 - 75))
1
>> (divide (subtract 100 55)  (subtract 100 75))
== 1
>> 

Красная версия 0.6.3 в Debian Stable Linux.


person rnso    schedule 24.09.2017    source источник
comment
Можете ли вы вставить вывод с вашей консоли и версию Red? Результат прекрасен в Rebol 2.   -  person Graham Chiu    schedule 24.09.2017
comment
Результат был опубликован выше.   -  person rnso    schedule 24.09.2017


Ответы (1)


Red не выполняет автоматическое преобразование из целого числа в число с плавающей запятой, как это делает Rebol, если все значения являются целыми числами и лучшим результатом может быть число с плавающей точкой.

Вы должны ввести значение с плавающей запятой в свои вычисления, как в

>> (100 - 55) / (100 - 75.0)
== 1.8

но, конечно, чем раньше, тем лучше.

>> (to-float 100) - 55 / (100 - 75)
== 1.8

Кстати, мне нравится использовать

divide subtract to-float 100 55 subtract 100 75

Вам нужно написать немного больше, но вы сохраните круглые скобки, и вам не нужно думать о приоритете

person sqlab    schedule 24.09.2017
comment
Деление целых чисел (в отличие от сложения, вычитания и умножения), скорее всего, приведет к значениям с плавающей запятой. Почему такое поведение по умолчанию? - person rnso; 24.09.2017
comment
Красный все еще развивается, и мой опыт работы с ним пока очень хорош. Спасибо за вашу помощь. - - person rnso; 24.09.2017
comment
@rnso Автоматическое принуждение к значениям с плавающей запятой в математических операциях еще не реализовано в Red. Тем не менее, по-прежнему будет способ избежать автопринуждения, когда он не нужен. - person DocKimbel; 24.09.2017
comment
На самом деле вам не нужно думать о приоритете, в отличие от большинства языков программирования, за исключением этого особого случая (бинарных) операторов. - person Geeky I; 24.09.2017