Проверка имеет двойное значение, рациональноJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проверка имеет двойное значение, рационально

Сообщение Anonymous »

Мне нужен метод, который принимает значение double и возвращает true, если входные данные приблизительно рациональны[1], или false, если нет. Пытался написать сам, так как не нашел ничего, что могло бы решить эту проблему.
Моя идея заключалась в том, чтобы проверить повторение в битах мантиссы с различным смещением и количеством сравниваемых бит

в '110011001100...' повторяется '1100' (так что это рационально) со смещением 0 бит и размером 4 бита
в '101100111000...' ничего повторяется (иррационально)
в '000100100100...' повторяется '001' (рационально) со смещением в 1 бит и размером в 3 бита

Но мой код всегда возвращает только true

Код: Выделить всё

    public static final long SIGNIF_BIT_MASK = 0x000FFFFFFFFFFFFFL;
public static final int SIGNIFICAND_WIDTH = 52;

public static boolean isRational(double input) {
// cases when easy to determine rational/irrational
if(Double.isNaN(input))return false;
if(Math.getExponent(input)>SIGNIFICAND_WIDTH)return true;
if(Math.floor(input)==input)return true;
long mantissa = Double.doubleToRawLongBits(input)&SIGNIF_BIT_MASK;
//offset up to 26 bits, more bits == more inaccurate
for(int h = 0; h < SIGNIFICAND_WIDTH/2; h++){
//width (i=1: 0b?, i=2: 0b?? ...), max is half of remaining bits
for (int i = 1; i < (SIGNIFICAND_WIDTH-h) / 2; i++) {
//extract needed bits
long mask1_____ = ((1L = SIGNIFICAND_WIDTH - i - h;
//i think that variable is the problem, but i can't solve it
int success = 0;
//check other groups
for (int j = 1; j 
 value < /th>
< /tr>
< /thead>


 51-46 < /td>
 110001 < /td>
< /tr>

 110001 < /td>
< /tr> />  45-40 < /td>
 110001 < /td>
< /tr>

td>....
.... />  110001 < /td>
< /tr>

 09-04 < /td>
 110001 < /td>
< /tr>

 03-00 < /td>
                     . /> < /tr>
< /tbody>
< /table> < /div>
Пример для 1/7 < /p>
 

 < /th> < /th> < /bits < /th> < /bits < /th> < /bits < /th> < /bits < /bits < /th> < /bits < /th> < /bits < /bits < /bits < /bits < /bits < /bits < /bits < /th> /> < /tr>
< /thead>


 51-49 < /td>
 001 < /td>
< /tr>

 48-46 < /td>
 < /td> < /td> < /td> < /td> < /td> < /td> < /td> < /td> < /td> < /td> < /td> < /td>  < /td> < /td> < /td>  < /td> < /td> < /td> < /td> < /td> < /td> < /td>  < /td> < /td> < /td> < /td> 001 < /td>  48-46 < /td>
/> < /tr>

...
....
< /tr>

 06-04 < /td>
 001 < /td>
< /tr>

 001 < /td>
< /td>
 001 < /td>
< /td> />  03-01 < /td>
 001 < /td>
< /tr>

 00-00 < /td>
 0 (игнорируется) < /td>
< /tr>
< /tbody>
< /table> < /table> < /br /> < /br /> < /br /> < /br /> < /br /> < /br /> < /br /> < /td>
< /tr>
< /tbody> < /td>
< /td>
> 

Подробнее здесь: [url]https://stackoverflow.com/questions/79778218/checking-is-double-value-rational[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»