Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > не компилится класс с переменной типа float


Автор: goblin 11.8.2006, 11:31
на коде:
Код
а import javax.microedition.midlet.MIDlet;


public class qwe extends MIDlet {
  public void pauseApp() {}
  public void destroyApp(boolean unconditional) {
    notifyDestroyed();
  }

  class C {
    float value;
  }

  public void startApp() {
    C gg = new C();
  }
}


компилер грит:

Error preverifying class qwe$C
    java/lang/VerifyError: 
com.sun.kvem.ktools.ExecutionException: Preverifier returned 1

если в описании класса поставить int то нормально компилится...

что я не так делаю?

Автор: VSergeyV 11.8.2006, 11:44
Это же мидлет, а там нету типа float smile , типо он там не нужен smile  Это касается только платформы ME smile 

Автор: Dancer 11.8.2006, 11:45
идём в Google и читаем всё про CLDC 1.0 и CLDC 1.1
Скорее всего ты используешь CLDC 1.0 библиотеку (а в ней нет поддержки плавающей арифметики). Так же уточни, под какой телефон ты это делаешь, возможно что девайс то же не поддерживает CLDC 1.1

Автор: goblin 11.8.2006, 12:00
если нет поддержки CLDC 1.1 то как быть...
есть ли какие нибудь открытые реализации дробных чисел для CLDC 1.0?
или нада писать свою замену... 

Автор: javastic 11.8.2006, 13:28
Порыска в Инете, там есть какие-то бесплатные решения.

Автор: W0LF 11.8.2006, 13:29
Напиши класс для работы с фиксированной точкой, а не с плавающей. Будет немного легче.
Цитата

Фиксированная точка она на то и фиксированная точка - порядок
подразумевается, а мантисса хранится в виде целого числа. Т.е.
число N = Nc + B*Nf, где Nc - целая часть числа, B - множитель, определяющий
кол-во знаков после запятой (если 6 десячиных знаков, то B=10^-6), Nf -
дробная часть числа с точностью до 6 знаков. Для хранения домножаешь это
число на 1/B, получаешь Nc/B + Nf - целое число. Все операции проводятся так
же, только при делении и умножении надо производить умножение/деление на B.
Проблема в том, что можно легко получить переполнение, так что надо считать
аккуратно.

Пример
Допустим хочещь иметь 3 знака после запятой. Значит
1,2 <=> 1200
1,3 <=> 1300

1,2*,1,3=1,56 <=> 1200*1300/1000 = 1560
1,2/1,3=0,923 <=> 1200*1000/1300 = 923

для sin и cos. легче всего построить таблицу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)