Проверка является рациональной двойной стоимостьюJAVA

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

Сообщение Anonymous »

мне нужен метод, который принимает двойной и возвращает True, если ввод приблизительно рациональный [1] или ложный, если нет. Пытался написать сам, потому что я не нашел ничего, что решило бы эту проблему < /p>
Моя идея состояла в том, чтобы проверить повторение в битах Mantissa с различным смещением и подсчетом сравнения битов < /p>

в '110011001100 ...' повторяет '1100' (так это это. Повторяет (иррациональный)
in '000100100100 ...' repeats '001' (рациональный) с смещением 1 бит и размером 3 бита
< /pre>
Но мой код всегда возвращает только true < /p>

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

    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 

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

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

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

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

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

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