FreeBasic
Главная
Вход
Регистрация
Пятница, 19.04.2024, 18:28Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Деление во FreeBasic (Даже опытный Может ошибиться! стыдоба!)
Деление во FreeBasic
electrikДата: Четверг, 27.01.2022, 21:14 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
вот вам код:

Код
dim q as integer = 10 *(12/10)
print q


и аналогичный код на c:

Код
#include <stdio.h>

int main(int argc, char *argv[])
{
    int q = 10 *(12/10);
    printf ("%d\n", q);
return 0;
}


Кому не влом, если у вас есть C, запустите и посмотрите результат! Он будет разный.

Короче, я тут проектик делаю, и мне нужно было делить без остатка. У меня заведомо получался не верный ответ. Блин, ну как же я мог про это забыть! Целочисленное деление бэкслэшик \!
Жесть! короче, чтобы код работал так же как на C, надо писать так:

Код
dim q as integer = 10 *(12\10)
print q


Блин, из-за этого деления, я один проект почти похоронил, ибо думал что я дурак и у меня там не правильно некоторые функции работают. Я его с C на FreeBasic переписывал.

Добавлено (27.01.2022, 21:31)
---------------------------------------------
проверил даже на таком примере, где все числа забиты в Integer переменные:

Код
dim a as integer = 10
dim b as integer = 12
dim c as integer = a *(b/a)
print c


короче всё что в скобках, он рассчитывает с обычным делением по флоатам.

Добавлено (27.01.2022, 21:35)
---------------------------------------------
Не, конечно можно делать приведение типа, но нафиг, если есть штатный способ.

 
zamabuvaraeuДата: Четверг, 27.01.2022, 23:56 | Сообщение # 2
Подполковник
Группа: Друзья
Сообщений: 147
Репутация: 4
Статус: Offline
Если делитель — это константа, то вместо деления лучше использовать умножение.

Например, вместо деления на 10 → умножаем на 0.1
Вместо деления на 2 → умножаем на 0.5.
Вместо деления на 4 → умножаем на 0.25.
И так далее.

Причины.
1. Умножение выполняется быстрее деления.
2. Повышается точность результата.

Добавлено (27.01.2022, 23:58)
---------------------------------------------
Вообще для сужающих операций лучше бы компилятор выкидывал Warning.

 
electrikДата: Пятница, 28.01.2022, 03:30 | Сообщение # 3
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
А мне в моём случае не нужна точность. Мне как раз надо было делить без дробной ччасти. В своё время когда писал немного на асме, читал что умножение быстрее. НО опять таки, в моём случае, не нужна скорость до тактов. У меня рассчитываются события для GUI, а там не надо экономить такты. Да и исходник я буду отдавать тем, кому проще будет прочитать прямой код без оптимизаций.
 
haavДата: Пятница, 28.01.2022, 04:52 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата electrik ()
Блин, ну как же я мог про это забыть! Целочисленное деление бэкслэшик \!

Чего ты удивляешься? Ты несколько лет писал на другом диалекте. Я тут 2-3 дня пописал на С++ , а потом вернувшись на FB , начал на автомате точки с запятой в FB коде ставить.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Пятница, 28.01.2022, 11:44 | Сообщение # 5
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Вот кстати, я бы хотел такой язык как чистый C, но с нормальными динамическими строками. Плюсы мне не очень заходят, из-за синтаксиса шаблонных функций. Дурная методика cout <<. Это выбивается из основного синтаксиса. Конечно это мои привычки, с которыми я свыкся и которые не хочется менять. Так же в бейсиках мне ненравиться  методика открытия файлов: open "text.txt for input as #1. Ну гораздо лучше былобы: open("test.txt, input, 1). Многословность в языке - это не плохо, но всё же функция должна быть функцией, и когда она работает без запятых, с кучей ключевых слов, ну такое. Я понимаю, что бейсик придумывался как человеческий язык, тогда надо было всё очеловечить. А так получается, что-то сделали похожее на предложения, а что-то оставили в функциональном стиле. Для начинающего программиста - это круть, но поскольку FreeBasic перегружен функциями, надо сделать ещё одну перегрузку без ключевых слов, только параметры. Кому надо, пусть пишут в старом стиле, а мне иногда так западло писать длинные строки! Я понимаю, что я сейчас говорю с высоты опыта, лет 20 назад, я бы топил за кучу ключевых слов, что это круто и понятно.
 
zamabuvaraeuДата: Пятница, 28.01.2022, 12:02 | Сообщение # 6
Подполковник
Группа: Друзья
Сообщений: 147
Репутация: 4
Статус: Offline
Но ведь cout — это не Си, это Си++.
Это разные языки программирования, у которых общего только — это точки с запятой в конце строки.
 
electrikДата: Пятница, 28.01.2022, 19:17 | Сообщение # 7
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Так я же написал что плюсы мне не заходят, то есть, указал конкретно что я имею ввиду C++.
 
zamabuvaraeuДата: Пятница, 28.01.2022, 22:35 | Сообщение # 8
Подполковник
Группа: Друзья
Сообщений: 147
Репутация: 4
Статус: Offline
А, всё нормально, это я ступил.
 
Форум » Freebasic » Вопросы по языку FreeBasic » Деление во FreeBasic (Даже опытный Может ошибиться! стыдоба!)
  • Страница 1 из 1
  • 1
Поиск: