forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   не могу победить double (http://forum.boolean.name/showthread.php?t=14758)

barsunduk 17.05.2011 19:24

не могу победить double
 
появилась беда, с которой я не в состоянии справиться без посторонней помощи.
при компиляции библиотеки, содержащей более четырех переменных типа double, проблем не возникает, однако MP2.2 на них реагирует неадекватно (ошибкой чтения либы). начинает утверждать, что ни одной из запрашиваемых функций в либе не нашел.
тоже происходит, если присутствует много вещественных чисел типа .5 или 1.0.

в связи с этим вопрос: как вы, ветераны либописания, справляетесь с этой проблеммой? ведь иногда необходимо использовать несколько нецелочисленных переменных.

не составит ли для вас труда выложить кусочек кода любой библиотеки, где вы работаете с типом double? может, я что-то не так делаю.

з.ы.: компилировал с помощью LibCo и Art-чего-то-там-от-Phantoma

barsunduk 17.05.2011 23:02

Ответ: не могу победить double
 
товарисч Phantom посоветовал следующее:
"Сделай копию своей библиотеки, только реализацию всех методов удали нафиг, просто пустые методы оставь, только return оставь и возвращай нужный тип данных. Глобальные приватные переменные можешь не объявлять. Скомпилируй, сунь в МП. МП тебе скомпилирует проект (понятно, что работать-то не будет, но компилятор ни к чему не придерётся), а потом в готовом JARе замени либу болванку настоящей либой. И проверь будет ли работать. Если будет, то это какой-то баг МП"

проверил, работает...

":-D Вот видишь. То баг МП"

ему смешно, а у моей любимой игрушки будто лапку оторвали. надо выбрасывать старые игрушки и учить java ..(

YellowAfterlife 18.05.2011 04:38

Ответ: не могу победить double
 
А как внасчет скачать последнюю версию МП(3.3C)?
Проверял на следующей библиотеке
PHP код:

public class Lib_test
{
    public static 
double d1;
    public static 
double d2;
    public static 
double d3;
    public static 
double d4;
    public static 
double d5;
    public static 
double d6;
    public static 
double d7;
    public static 
double d8;
    public static 
void save1(String value) { d1 Double.parseDouble(value); }
    public static 
void save2(String value) { d2 Double.parseDouble(value); }
    public static 
void save3(String value) { d3 Double.parseDouble(value); }
    public static 
void save4(String value) { d4 Double.parseDouble(value); }
    public static 
void save5(String value) { d5 Double.parseDouble(value); }
    public static 
void save6(String value) { d6 Double.parseDouble(value); }
    public static 
void save7(String value) { d7 Double.parseDouble(value); }
    public static 
void save8(String value) { d8 Double.parseDouble(value); }
    public static 
String sumall()
    {
        return 
Double.toString((d1+d2+d3+d4+d5+d6+d7+d8));
    }
    public static 
String some()
    {
        return 
"It quite works.";
    }


Несмотря на то что double целых 8, все работает нормально.

Для MP2.2 тоже есть вариант (правда немного ненормальный): храните все double в массиве. Пример кода:
PHP код:

public class Lib_test
{
    public static 
double d[] = new double[8];
    public static 
void setd(int iString value)
    {
        
d[i] = Double.parseDouble(value);
    }
    public static 
String sumall()
    {
        
d[0] = 0;
        for (
int i 18+= 1d[0] += d[i];
        return 
Double.toString(d[0]);
    }
    public static 
String some()
    {
        return 
"It quite works.";
    }




... програмное обеспечение обновляют ведь не просто так.

barsunduk 18.05.2011 17:24

Ответ: не могу победить double
 
Цитата:

Сообщение от YellowAfterlife (Сообщение 188832)
А как внасчет скачать последнюю версию МП(3.3C)?

она у меня есть, но хотелось бы чтобы либа работала на всех версиях мп. мне, кстати, мп2.2 нравится своим замечательным графическим редактором.

Цитата:

Сообщение от YellowAfterlife (Сообщение 188832)
Проверял на следующей библиотеке

и впрямь работает... похоже, я ошибся, и проблемка у меня была в другом:
добавляем в вашу библиотеку Lib_test, в строку вычисления одно число и библиотека становится непригодной для использования в мп.
PHP код:

return Double.toString((d1*0.5+d2+d3+d4+d5+d6+d7+d8)); 

Цитата:

Сообщение от YellowAfterlife (Сообщение 188832)
Для MP2.2 тоже есть вариант (правда немного ненормальный): храните все double в массиве.

спасибо за совет, но я пару дней назад пробовал этот вариант. в моем случае это не помогло, к сожалению. тогда я еще не догадался, что проблемма у меня была не в количестве вещественных переменных, а в контексте, в котором они используются. что-то не то с выражениями, в которых используются double.

проблемма немного изменила свою суть, но осталась пока нерешенной.

x = (int) (x1*(1.0 - i*1.0/(steps*1.0))*(1.0 - i*1.0/(steps*1.0)) + x2*(i*1.0/(steps*1.0))*(1.0 - i*1.0/(steps*1.0)) + x3*(i*1.0/(steps*1.0))*(i*1.0/(steps*1.0)));

если в этой строке заменить любое 1.0 скажем на число 2.0, то библиотека не работает, мп ее не читает.
в общем, мп2.2 не признает вычислений с любыми вещественными, отличными от 1.0 ..(

barsunduk 18.05.2011 17:56

Ответ: не могу победить double
 
забодай меня трамваем! включил floating-point и всё заработало. а вчера это не помогло почему-то. и я зачем-то вернул fixed-point и потратил еще один день на возню с несуществующей проблемой. вот зачем я это сделал? :wallbash:

ну чтож, по крайней мере, я победил этот драный double, а заодно пообщался с умными людьми ..)

добавлено позже:
хер я чо победил. продолжает глючить, теперь не могу объявить больше 1й переменной типа double. никакие float не помогают


Часовой пояс GMT +4, время: 03:24.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot