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

Я пытаюсь вывести правильное значение простого выражения: (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.

1 ответ

Решение

Красный не выполняет автоматического преобразования из целого числа в число с плавающей точкой, как это делает 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

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

Другие вопросы по тегам