Особенности вычисления в JS
Нашел скрипт для вычисления определителя матрицы: http://mathhelpplanet.com/static.php...nad-matritsami
Нужно вычислить определитель такой матрицы: ![]() var M = new Array(); M[0] = new Array(-2.3128860264714093, -1.1564430132357046, 0, 254.417462911855); M[1] = new Array(-1.1564430132357046, -2.3128860264714097, 254.417462911855, -9.769962616701378*Math.pow(0.1,14)); M[2] = new Array(10.876222279050648, -5.572421139525324, 59.09640000000007, -3559.6051520867136); M[3] = new Array(-5.572421139525324, 10.876222279050648, -3559.6051520867136, 59.09640000000007); При этом скрипт на JS возвращает -0, а маткад конкретное число: ![]() Причем если из элемента 2 строки 4 столбца убрать 10^(-14), то результаты, можно сказать, совпадают: ![]() В чем проблема и как ее решить? |
https://www.youtube.com/watch?v=0VbK_WPgZmQ
тут все по полочкам. |
j0hnik,
Понятно. У этой проблемы есть общеизвестное решение? Нагуглил длинную арифметику, но мне для этого придется все арифметические операции переписывать, может есть что-то поэлегантнее? |
Можно подключить библиотеку http://jsfromhell.com/classes/bignumber
С помощью gulp-replace можно кодить в файле operations.js, затем компилировать автоматически файл operations.bignumber.js. Что собой должна представлять автоматическая компиляция: в файле operations.js искать строки типа 1-2 и заменять на '1'.subtract('2') Примерно так: "-1.55-1".replace(/(-?\d+(?:\.\d+)?)-(-?\d+(?:\.\d+)?)/g, "'$1'.subtract('$2')") |
brizing,
Спасибо за разъяснения |
Часовой пояс GMT +3, время: 05:51. |