www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   MidletPascal (http://forum.boolean.name/forumdisplay.php?f=46)
-   -   Список телефонов, совместимых с floating-point МидлетПаскаля (http://forum.boolean.name/showthread.php?t=8581)

Bruteo 30.06.2009 02:45

Список телефонов, совместимых с floating-point МидлетПаскаля
 
Вложений: 1
Мидлет для проверки совместимости телефона в приложении к посту!

Думаю, некоторым форумчанам известно, что не на всех телефонах правильно работают приложения из MidletPascal, в которых используется floating-point (в русской версии мидлетпаскаля - в конфигурации сборки "Погрешность: до 0.000001"). На некоторых моделях телефонов расчёты с использованием чисел с плавающей точкой проводятся неправильно, и приходится использовать fixed-point (в русской версии мидлетпаскаля - в конфигурации сборки "Погрешность: до 0.0001") при сборке проекта.
Мной было установлено, что эти ошибки не постоянны, а возникают далеко не при каждом расчёте. Это может сильно подпортить настроение разработчикам, которые не знают об этой проблеме, но пытаются найти где же ошибка в их приложении.

Я предлагаю совместно составить список телефонов, на которых проявляется эта проблема или, наоборот, не проявляется. Для отнесения телефона к совместимым или несовместимым я написал простое приложение, которое сообщит, могут ли мидлеты с floating-point работать на вашем телефоне. Вам нужно просто установить мидлет, запустить, а потом отписаться в этой теме, сообщив результат теста и модель телефона.

После чего в первом сообщении в теме все данные будут оседать в упорядоченном виде. Мной уже был составлен небольшой список, от него и будем отталкиваться ;)

Модели телефонов, на которых ПРАВИЛЬНО работают мидлеты с floating-point (в русской версии мидлетпаскаля - в конфигурации сборки "Погрешность: до 0.000001")

Nokia E70; Nokia E61; Nokia E61i; Nokia 6125; Nokia 5800; предположительно, все модели Nokia, выпущенные в 2006 году и позже

Модели телефонов, на которых НЕ работают мидлеты с floating-point("Погрешность: до 0.000001") и нужно использовать fixed-point("Погрешность: до 0.0001")

Nokia 7710; Nokia 6681; Nokia 6630; Nokia 6600; Nokia 3230; Siemens SL75, Siemens ME75

Мидлет для проверки совместимости телефона в приложении к посту!

Исходный код приложенного мидлета. Внимание! Собирать мидлет нужно, выбрав в конфигурации сборки floating-point("Погрешность: до 0.000001"). Иначе - толку от проверки не будет - все телефоны будут совместимы. В код программы я внёс проверку на правильность сборки мидлета, так что не удивляйтесь ;)
Код:

Program mp_float_test;

var
cont,exitCmd,clicked:command;
label_id,i:integer;
text:string;
good_compile:boolean;

Begin
    clearform;
    exitCmd := createCommand('Выход', CM_EXIT, 2);
    addCommand(exitCmd);
    if Length(''+asin(1))<10 then
    begin
        good_compile:=false;
        label_id := formAddString('Вы запустили неправильно собранный мидлет. При сборке в конфигурации нужно выбрать floating-point(Погрешность: до 0.000001).');
    end;
    else
    begin
        good_compile:=true;
        label_id := formAddString('Сейчас начнется тестирование телефона на совместимость с floating-point в мидлетах MidletPascal.');
        cont := createCommand('Начать тест', CM_OK, 1);
        addCommand(cont);
    end;
    showForm;
   
    repeat
        delay(50);
        clicked:=getClickedCommand;
    until clicked <> emptyCommand;
    if (clicked = exitCmd) or (not good_compile) then halt;
   
    clearform;
    text:='Ура! Ваш телефон совместим с floating-point! Пожалуйста, сообщите об этом на форуме boolean.name, указав модель.';
    i:=1;
   
    repeat
        i:=i+1;
        if (copy(''+exp(1),0,6)<>'2.7182') or
            (copy(''+sin(0.78539816),0,6)<>'0.7071') or
              (copy(''+pow(3.5,7),0,6)<>'6433.9') or
            (copy(''+log(25),0,6)<>'3.2188') then
                        text:='К сожалению, ваш телефон НЕсовместим с floating-point! Пожалуйста, сообщите об этом на форуме boolean.name, указав модель.';
    until i<11;
   
    exitCmd := createCommand('Выход', CM_EXIT, 2);
    addCommand(exitCmd);
    label_id := formAddString(text);
   
    repeat
        delay(50);
        clicked:=getClickedCommand;
    until clicked <> emptyCommand;
End.


12121 30.06.2009 06:44

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Nokia N73ME совместим

odd 01.07.2009 13:25

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Siemens C75 несовместим. Точно помню, сколько я на нем с синусами и косинусами промучался. Выскакивали какие-то совершенно неожиданные глюки.

Tronix 27.07.2009 12:14

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Цитата:

Сообщение от odd (Сообщение 109572)
Siemens C75 несовместим. Точно помню, сколько я на нем с синусами и косинусами промучался. Выскакивали какие-то совершенно неожиданные глюки.

Siemens C75 - Ура, ваш телефон совместим бла бла бла. Прошивка v24.
Но хз конечно, может быть просто в этой программе все нормально, а как там на самом деле при реальных задачах - трудно сказа

odd 27.07.2009 15:03

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Хороший тест, это вот такой трехмерный кубик.
В идеале на экране должен вращаться кубик.
Если floating point вычисления глючат, то будет рисоваться
какая-то какофония из линий.

PHP код:

Program Project_3D_cube_2;

Uses    gfx;

Const
        
vortex 6// Количество граней -1
        
points 11// Количество точек -1

Type point record    // Тип данных для хранения точки или подобной бурды
    
xyzreal;
end;
        
Var    
andx1dy1dx2dy2real;
        
p: array [0..pointsof point// Тут хранятся все точки
        
e: array [0..vortex0..3of integer// А тут все грани
        
iwihixiyiinteger;
        
tempanglepoint;

Procedure RotZ;
var    
t,arreal;
begin
    t
:=sqrt(temp.x*temp.x+temp.y*temp.y);
        
ar:=atan2(temp.y,temp.x)+an;
        
temp.x:=t*cos(ar); temp.y:=t*sin(ar);
end;

Procedure RotY;
var    
t,arreal;
begin
    t
:=sqrt(temp.x*temp.x+temp.z*temp.z);
        
ar:=atan2(temp.z,temp.x)+an;
        
temp.x:=t*cos(ar); temp.z:=t*sin(ar);
end;

Procedure RotX;
var    
t,arreal;
begin
    t
:=sqrt(temp.x*temp.x+temp.y*temp.y);
        
ar:=atan2(temp.y,temp.x)+an;
        
temp.x:=t*cos(ar); temp.y:=t*sin(ar);
end;

Procedure Show;
var
    
yesinteger;
begin
    
for i:=0 to vortex do
    
begin
    dx1
:=p[e[i,1]].x-p[e[i,0]].xdy1:=p[e[i,1]].y-p[e[i,0]].y;
    
dx2:=p[e[i,2]].x-p[e[i,1]].xdy2:=p[e[i,2]].y-p[e[i,1]].y;
    if (
dx1*dy2-dx2*dy1<0then
        begin
        DrawLine
(trunc(p[e[i,0]].x+wi/2), trunc(p[e[i,0]].y+hi/2), trunc(p[e[i,1]].x+wi/2), trunc(p[e[i,1]].y+hi/2));
        
DrawLine(trunc(p[e[i,1]].x+wi/2), trunc(p[e[i,1]].y+hi/2), trunc(p[e[i,2]].x+wi/2), trunc(p[e[i,2]].y+hi/2));
        
DrawLine(trunc(p[e[i,2]].x+wi/2), trunc(p[e[i,2]].y+hi/2), trunc(p[e[i,3]].x+wi/2), trunc(p[e[i,3]].y+hi/2));
        
DrawLine(trunc(p[e[i,3]].x+wi/2), trunc(p[e[i,3]].y+hi/2), trunc(p[e[i,0]].x+wi/2), trunc(p[e[i,0]].y+hi/2));
    
end;
    
end;
end;

Begin
    an
:=0.017;
    
p[0].x:=30p[0].y:=30p[0].z:=30;            // Сама фигура (в оригинале - куб)
    
p[1].x:=30p[1].y:=-30p[1].z:=30;
    
p[2].x:=-30p[2].y:=-30p[2].z:=30;
    
p[3].x:=-30p[3].y:=30p[3].z:=30;
    
p[4].x:=30p[4].y:=30p[4].z:=-30;
    
p[5].x:=30p[5].y:=-30p[5].z:=-30;
    
p[6].x:=-30p[6].y:=-30p[6].z:=-30;
    
p[7].x:=-30p[7].y:=30p[7].z:=-30;

    
p[8].x:=20p[8].y:=20p[8].z:=30;                // Дырка
    
p[9].x:=20p[9].y:=-20p[9].z:=30;
    
p[10].x:=-20p[10].y:=-20p[10].z:=30;
    
p[11].x:=-20p[11].y:=20p[11].z:=30;
    
    
e[0,0]:=0e[0,1]:=1e[0,2]:=2e[0,3]:=3;            // ВАЖНО: Все точки в грани нужно описывать по ходу часовой стрелки!
    
e[1,0]:=1e[1,1]:=5e[1,2]:=6e[1,3]:=2;
    
e[2,0]:=5e[2,1]:=4e[2,2]:=7e[2,3]:=6;
    
e[3,0]:=4e[3,1]:=0e[3,2]:=3e[3,3]:=7;
    
e[4,0]:=4e[4,1]:=5e[4,2]:=1e[4,3]:=0;
    
e[5,0]:=3e[5,1]:=2e[5,2]:=6e[5,3]:=7;
    
    
e[6,0]:=8e[6,1]:=9e[6,2]:=10e[6,3]:=11;        // Описание дырки
    
    
wi:=GetWidthhi:=GetHeight;
    
    
angle.x:=1*0.017;
    
angle.y:=2*0.017;
    
angle.z:=1*0.017;
    
    
repeat
    
for i:=0 to points do
        
begin
            temp
.x:=p[i].xtemp.y:=p[i].ytemp.z:=p[i].z;
            
an:=angle.x;
            
RotX;
            
an:=angle.y;
            
RotY;
            
an:=angle.z;
            
RotZ;
            
p[i].x:=temp.xp[i].y:=temp.yp[i].z:=temp.z;
        
end;
        
SetColor(0,0,0); FillRect(0,0,wi,hi); SetColor(0,255,0);
        
ShowRepaint;
    
until FALSE;
End


GRAY_WOLF 31.07.2009 21:07

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Цитата:

Хороший тест, это вот такой трехмерный кубик.
В идеале на экране должен вращаться кубик.
Если floating point вычисления глючат, то будет рисоваться
какая-то какофония из линий.
Если правильно выставить floating point до 0,000001 в проекте то будет про рисовываться куб, иначе ерись. Проверял на KEmulatore и N7390.

Bruteo 25.10.2009 18:50

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Цитата:

Сообщение от Tronix (Сообщение 111992)
Siemens C75 - Ура, ваш телефон совместим бла бла бла. Прошивка v24.
Но хз конечно, может быть просто в этой программе все нормально, а как там на самом деле при реальных задачах - трудно сказа

Мой опыт показывает, что если телефон не заваливается на нескольких прогонах простых тестов (что и реализовано в приложении из первого поста) - то он не заваливается, вообще.
Мой опыт: приложение fncalc, протестированное на многих телефонах.
http://frolov.net/fncalc/

Опять же, я наблюдал, что при единичном прогоне вычислений из тестового приложения - некоторые кривые ява машины таки давали верный результат. Поэтому в тестовом приложении тест загнан в цикл на 10 повторов.
Было бы, конечно, здорово разобраться в природе этой ошибки и исправить. Моё копание в исходниках компилятора не дало результатов. Нужно глубже понимать принципы построения и выполнения байткода, видимо =)

GanGSISoft 26.10.2009 12:29

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Sony Ericsson K800 (прошивка: R8BF003 версия java машины 7.7).
Тест прошел удачно (при помощи программы из первого поста).

Bruteo 27.10.2009 12:20

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Собранная мной информация по совместимым телефонам ещё:
SonyEricsson K610i, K770i, K810i, C902, W760a, W910i, K320i, W580i, W760i, K850i, K660i, G700, K850i, W800i, Z710i, K550i... огромное количество других сонериков, не буду перечислять);
LG KP500; LG KM900;
SAMSUNG SGH-U800; SAMSUNG SGH-U600; SAMSUNG SGH-i450; SAMSUNG S5230; SAMSUNG SGH-J700;
HTC Touch Viva


Вообще, складывается ощущение, что проблемы только на большинстве сименсов и на старых нокиях(2005 год и старше). Если кто-то может опровергнуть это предположение - пишите =)

Arton 13.12.2009 11:58

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Все работает, Siemens S75 прошивка 47-я.

baton4ik 16.12.2009 16:24

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
sony ericsson w300i работает! поддерживает :P

scorey 17.12.2009 19:12

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
моторола л9 совместим с плавающей точкой

Arton 26.01.2010 20:42

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Цитата:

Сообщение от Arton (Сообщение 129443)
Все работает, Siemens S75 прошивка 47-я.

Наврал я :mad: не работает на моём сименсе, сейчас перепроверил.

Ksanatos 03.02.2010 11:44

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
W760i работает отлично (ПО: 1202-3592 R3CA037 080713 Sony Ericson)

Tronix 03.02.2010 11:59

Ответ: Список телефонов, совместимых с floating-point МидлетПаскаля
 
Цитата:

Сообщение от Arton (Сообщение 134872)
Наврал я :mad: не работает на моём сименсе, сейчас перепроверил.

Подтверждаю, на S75 куб от Odd'а превращается в хаотичные линии, хотя первый тест проходит. С другой стороны хорошим тоном считается избавление от floating-point в алгоритмах. Тот же куб можно легко сделать на целочисленных переменных. Я гарантирую это.


Часовой пояс GMT +1, время: 06:58.

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