Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2018, 19:56
Интересующийся
Отправить личное сообщение для DmitryOpalev Посмотреть профиль Найти все сообщения от DmitryOpalev
 
Регистрация: 05.11.2010
Сообщений: 22

Особенности вычисления в 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), то результаты, можно сказать, совпадают:

В чем проблема и как ее решить?
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2018, 20:28
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

https://www.youtube.com/watch?v=0VbK_WPgZmQ
тут все по полочкам.
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2018, 21:40
Интересующийся
Отправить личное сообщение для DmitryOpalev Посмотреть профиль Найти все сообщения от DmitryOpalev
 
Регистрация: 05.11.2010
Сообщений: 22

j0hnik,
Понятно. У этой проблемы есть общеизвестное решение? Нагуглил длинную арифметику, но мне для этого придется все арифметические операции переписывать, может есть что-то поэлегантнее?
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2018, 15:17
Аватар для brizing
Интересующийся
Отправить личное сообщение для brizing Посмотреть профиль Найти все сообщения от brizing
 
Регистрация: 08.02.2014
Сообщений: 23

Можно подключить библиотеку 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')")
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2018, 18:36
Интересующийся
Отправить личное сообщение для DmitryOpalev Посмотреть профиль Найти все сообщения от DmitryOpalev
 
Регистрация: 05.11.2010
Сообщений: 22

brizing,
Спасибо за разъяснения
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалог между HTML и внешним JS в контексте расширения GoogleChrome ev1lart Events/DOM/Window 0 26.04.2017 19:25
BackEnd/FrontEnd Developer (Native JS) Abab Работа 0 25.12.2016 10:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
JS Coaching для стартапа OlgaAyva Работа 12 27.09.2011 22:18
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28