- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
println (13.0 to 14.0 by 0.1);
println (1.3 to 1.4 by 0.01);
println (7.0 to 8.2 by 0.3);
//Output:
NumericRange(13.0, 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14.0)
NumericRange(1.3, 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39)
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1616)
Скала - говно. Вернее даже говнище. И это достойно отдельного поста.
Консолька для запуска тут:
http://www.simplyscala.com/
LispGovno 25.10.2012 19:29 # −1
Интересно, чем это вызвано?
bormand 25.10.2012 19:42 # +2
scriptin 25.10.2012 19:56 # 0
УМВР ЧЯДНТ?
>http://www.simplyscala.com/
Понятно.
3.14159265 25.10.2012 20:05 # +3
А вот это тоже так должно быть:
>> 14.0)
>> 1.39)
scriptin 25.10.2012 20:17 # 0
Предполагаю, что с точностью до версии JVM.
>А вот это тоже так должно быть
IEEE 754 же (который используется JVM):
1.3 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 == 1.4000000000000001
3.14159265 25.10.2012 20:25 # +4
Да причем тут JVM? Язык программирования, который претендует на звание кроссплатформенного не должен зависеть от виртуальной машины на которой он запущен.
Это же логическая надстройка над JVM, а жабомашина - это просто средство.
Вот сама JVM не зависит от процессора. 64-битный он или 16-битный, int в ней всегда 32 бита. А плавающая точка - IEEE 754.
scriptin 25.10.2012 21:08 # −2
С чего вы взяли, что кроссплатформенность подразумевает отказ от формата IEEE 754? Это где-то декларируется в документации Scala? Scala использует тот же формат чисел с плавающей точкой, что и Java, причем именно потому, что использует Java как основу. И он кроссплатформенно поддерживает формат IEEE 754.
Впрочем, вот вам для успокоения точная арифметика:
3.14159265 25.10.2012 21:19 # +2
Очень точная. Точнее некуда
http://ideone.com/77vJA4
scriptin 25.10.2012 22:21 # +1
Дело в том, что вы в конструктор BigDecimal передаете double (в формате IEEE 754), который округляется еще до того, как попадает в конструктор. Неудивительно, что при этом вы получаете 1.4.
Да вас еще кто-то и плюсует за ваш блистательный анализ языка.
3.14159265 26.10.2012 16:03 # +3
У меня еще достаточно аргументов и примеров что ваша Скала - говно:
>Да вас еще кто-то и плюсует за ваш блистательный анализ языка.
Плюсуют потому что никаких аргументов от адептов скалы кроме как неловких попыток охарактеризовать поплеваться говном в меня
>Нет, случилось так, что ты имбецил.
>вы типичный неосилятор.
И отмазок типа "версия не та", "JVM неправильная", "платформа неудачная"
не слышно.
3.14159265 25.10.2012 20:51 # +3
есть груви, который тоже работает на underlying JVM. Причем работает нормально:
Result:
И как же так? Случилось чудо?
http://ideone.com/cX1tRK
guest 26.10.2012 08:37 # +1
TarasB 25.10.2012 22:27 # +2
Перегрузка оператора <=, чтобы сам добавлял нужное эпсилон? А какое эпсилон нужно?
LispGovno 26.10.2012 10:25 # +4
Ага. Хаскель недостаточно чист. Он использует разрушающие присваения для регистров процессора