Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.197.64.207] |
|
Страницы: (5) « Первая ... 2 3 [4] 5 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
Цитата JoeUser @ В моём понимании проблема в том, что мы не можем с уверенностью заявлять, то -0.2 = -1/5. Как ни прискорбно. Потому что это может быть -0.2000000000000000000000012345 или (наверное) -2/10, как кто-то выше говорил.Я читаю, и у меня из глаз льется кровь! Что такое "отрицательная степень", что такое "дробная степень" все же знают? Все знают как меняется знак от четности/нечетности возведения в степень, все знают что можно извлекать корень нечетной степени из отрицательного числа не уходя в комплексное исчисление? Нафига все эти домыслы?!!! Неужели курса математики старших классов мало???! Короче говоря, у меня только 1 мысль: встроить callback-функцию, которая будет вызывать юзерскую процедуру, а эта процедура уже будет решать что делать с этим безобразием... Плюс сделать ещё пару функций типа Root (корень нужной степени) и FracPower (где задаются X, P, Q, т.е. это комбинация Root и Power). |
Сообщ.
#47
,
|
|
|
Цитата Jin X @ В моём понимании проблема в том, что мы не можем с уверенностью заявлять, то -0.2 = -1/5. Как ни прискорбно. Потому что это может быть -0.2000000000000000000000012345 или (наверное) -2/10, как кто-то выше говорил. Короче говоря, у меня только 1 мысль: встроить callback-функцию, которая будет вызывать юзерскую процедуру, а эта процедура уже будет решать что делать с этим безобразием... Плюс сделать ещё пару функций типа Root (корень нужной степени) и FracPower (где задаются X, P, Q, т.е. это комбинация Root и Power). Jin X, дружище! Не нужно путать теплое с мягким! Есть математика со своими правилами/законами, и есть исчисление на регистрах, со своими заморочками и ограничениями. Понятие "с этим безобразием" - означает только одно, ты не проработал "правила игры" в должной мере. Как правильно (математика) ты знаешь, как может быть (компьютерное представление и исчисление) - ты тоже знаешь. Задача простая - найти способ максимального соответствия. Предвижу вопрос "это ппц сложно", а кто сказал что должно быть просто? |
Сообщ.
#48
,
|
|
|
Надо просто написать отдельную функцию, которая возводит число не в целую или вещественную степень а в дробную (с явно заданными числителем и знаменателем показателя). Функция должна сократить получающуюся дробь и в зависимость от чётности знаменателя после сокращения выдать результат или сообщить об ошибке.
Это куда практичнее, чем заставлять комп гадать, является ли переданное вещественное число представлением дроби 1/5, или оно просто случайно оказалось примерно равным 0.2. Можно даже использовать (написать) тип/класс для представления дроби, если так будет удобнее, в этом случае имеет смысл снабдить его всеми необходимыми операциями. В языках со статической типизацией это будет или перегруженная функция или функция обозначенная суффиксом (в Си есть функции pow и powi, пусть будет ещё и powfrac, например) В языках с динамической типизацией можно проверить тип показателя степени. |
Сообщ.
#49
,
|
|
|
Цитата amk @ Функция должна сократить получающуюся дробь и в зависимость от чётности знаменателя после сокращения выдать результат или сообщить об ошибке. +1 |
Сообщ.
#50
,
|
|
|
Эх, amk, есть, конечно, польза и мудрость в ваших словах, но простым людям это слишком излишне, запутано. Пишущий pow(-32,-0.2f) не станет гадать и посылать числитель со знаменателем! А число 0,2 в машине (сколько я прикидываю) действительно не так запишется, а с табуном нулей опосля 2: 0,20000000000***. Т.о., нужно поменять аж компилятор, дабы он понял, что записали -0,2 и постарался выдать те самые честные числитель со знаменателем!! Какая-то жесточайшая специфика=особенность возникает, - никто (думается) на таковое не пойдёт.
|
Сообщ.
#51
,
|
|
|
Цитата amk @ Так, я и говорю, что нужно сделать несколько функций: Power, Root и FracPower (или PowerFrac).в Си есть функции pow и powi, пусть будет ещё и powfrac, например Прикол просто в том, что обычно числа передаются как вещественные и могут быть результатом какого-то выражения. Этот случай тоже хотелось бы предусмотреть. Скажем, мы делаем калькулятор, юзер ввёл функцию (-2)^(3/7). Можно попытаться распознать выражение в скобках как дробь и использовать FracPower(-2, 3, 7), а можно использовать функцию PowerECB, которой мы будем передавать callback-функцию, разбивающую вещественное число на P и Q (по возможности). Единственное, что мне тут не нравится – это элемент случайности, т.е. если строить график функции (-2)^SIN(X), то функцию возможно будет вычислять "через раз" (или даже реже), т.к. во многих случаях результат типа 0.7642232323567763 вряд ли удастся представить с нечётным Q. И исходя из этого вся эта затея кажется абсурдной. Вообще, как я понимаю, во FracPower при X < 0 параметр Q должны быть целым и больше 0, так ведь (ведь не существует корней дробной, нулевой или отрицательной степени)? А вот P может быть любым. И при X > 0 значение Q может быть любым. Верно? |
Сообщ.
#52
,
|
|
|
Цитата Jin X @ при X > 0 значение Q может быть любым. Верно? Ненулевым Цитата Jin X @ Вообще, как я понимаю, во FracPower при X < 0 параметр Q должны быть целым и больше 0, так ведь (ведь не существует корней дробной, нулевой или отрицательной степени)? А вот P может быть любым. Я так понял, что функция FracPower должна иметь сигнатуру (double,int,int). Тогда если X<0, то Q должно быть положительным и нечетным, либо при делении на НОД(P,Q) становиться нечетным. Цитата Jin X @ функции (-2)^SIN(X) А она вообще определена на непрерывном множестве? Что-то мне подсказывает, что нет. Даже на комплексной плоскости. |
Сообщ.
#53
,
|
|
|
Это у вас плохое предсказание. В комплексных числах она вполне нормально определена и ведёт себя (чрез экспоненту и логарифм распишите и увидите).
Вообще суть проблемы в том, что действительно операция (-2)y для вещественного результата - неустойчивая, т.е. малые изменения вполне способны бросать значения из действительного результата в комплексные. Так что самым надёжным итогом будет написание функции: Степень( число x, строка y) = xy, чтобы анализировать запись 'y' и пытаться понять: искать ли вещ.корни, или их не бывает. |
Сообщ.
#54
,
|
|
|
Цитата Славян @ А число 0,2 в машине (сколько я прикидываю) действительно не так запишется, а с табуном нулей опосля 2: 0,20000000000***. Т.о., нужно поменять аж компилятор, дабы он понял, что записали -0,2 и постарался выдать те самые честные числитель со знаменателем!! Что то я не понимаю, а почему не округлить нужное число до второго знака, тем самым получив нужное число, без табуна нулей опосля 2? |
Сообщ.
#55
,
|
|
|
Аппаратно нельзя. Особенность маш. представления чисел в x86.
|
Сообщ.
#56
,
|
|
|
Цитата KILLER @ почему не округлить нужное число до второго знака, тем самым получив нужное число, без табуна нулей опосля 2? Потому, что там не только нули. Отрицательное число можно возводить в дробную степень, где целый числитель и целый нечётный знаменатель, типа 1/3, 2/7. Ни одно из таких чисел нельзя представить конечной двоичной дробью, но float или double представлены именно конечной двоичной дробью. |
Сообщ.
#57
,
|
|
|
Цитата KILLER @ Так это и есть округлённое до второго (десятичного) знака число. Но не забывай, в компьютерах используется двоичное представление чисел, поэтому десятичные дроби не представимы точно. Почему, Mikle уже написал.Что то я не понимаю, а почему не округлить нужное число до второго знака, тем самым получив нужное число, без табуна нулей опосля 2? Цитата Славян @ Не только в x86. Этим страдают все аппаратные представления вещественных чисел. Аппаратно нельзя. Особенность маш. представления чисел в x86. |
Сообщ.
#58
,
|
|
|
Цитата amk @ Я убеждён, что в какой-нибудь машине сделали/делали не только расчёт в двоичной системе, но и в иных, и даже в десятеричной. Не только в x86. Этим страдают все аппаратные представления вещественных чисел. |
Сообщ.
#59
,
|
|
|
Сетунь считала в троичной. Калькуляторы считают преимущественно в десятичной.
Также в десятичной системе считали некоторые машины в 60-х, 70-х годах. Точнее в двоично-десятичной. Сейчас недвоичных машин практически не осталось. Да и те выполняют роль скорее музейных экспонатов. |
Сообщ.
#60
,
|
|
|
Погодите, а на чём Ява то считает? Их же тупой интерпретатор вполне способен скушать десятичное представление числа в записи строки pow(-32,-0.2) (или как у них там?) и выдать норм ответ!? Или просто решили забить?
|