Деление во FreeBasic
|
|
electrik | Дата: Четверг, 27.01.2022, 21:14 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: 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 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: 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 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| А мне в моём случае не нужна точность. Мне как раз надо было делить без дробной ччасти. В своё время когда писал немного на асме, читал что умножение быстрее. НО опять таки, в моём случае, не нужна скорость до тактов. У меня рассчитываются события для GUI, а там не надо экономить такты. Да и исходник я буду отдавать тем, кому проще будет прочитать прямой код без оптимизаций.
|
|
| |
haav | Дата: Пятница, 28.01.2022, 04:52 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1374
Статус: Offline
| Цитата electrik ( ) Блин, ну как же я мог про это забыть! Целочисленное деление бэкслэшик \! Чего ты удивляешься? Ты несколько лет писал на другом диалекте. Я тут 2-3 дня пописал на С++ , а потом вернувшись на FB , начал на автомате точки с запятой в FB коде ставить.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Пятница, 28.01.2022, 11:44 | Сообщение # 5 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Вот кстати, я бы хотел такой язык как чистый C, но с нормальными динамическими строками. Плюсы мне не очень заходят, из-за синтаксиса шаблонных функций. Дурная методика cout <<. Это выбивается из основного синтаксиса. Конечно это мои привычки, с которыми я свыкся и которые не хочется менять. Так же в бейсиках мне ненравиться методика открытия файлов: open "text.txt for input as #1. Ну гораздо лучше былобы: open("test.txt, input, 1). Многословность в языке - это не плохо, но всё же функция должна быть функцией, и когда она работает без запятых, с кучей ключевых слов, ну такое. Я понимаю, что бейсик придумывался как человеческий язык, тогда надо было всё очеловечить. А так получается, что-то сделали похожее на предложения, а что-то оставили в функциональном стиле. Для начинающего программиста - это круть, но поскольку FreeBasic перегружен функциями, надо сделать ещё одну перегрузку без ключевых слов, только параметры. Кому надо, пусть пишут в старом стиле, а мне иногда так западло писать длинные строки! Я понимаю, что я сейчас говорю с высоты опыта, лет 20 назад, я бы топил за кучу ключевых слов, что это круто и понятно.
|
|
| |
zamabuvaraeu | Дата: Пятница, 28.01.2022, 12:02 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Но ведь cout — это не Си, это Си++. Это разные языки программирования, у которых общего только — это точки с запятой в конце строки.
|
|
| |
electrik | Дата: Пятница, 28.01.2022, 19:17 | Сообщение # 7 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Так я же написал что плюсы мне не заходят, то есть, указал конкретно что я имею ввиду C++.
|
|
| |
zamabuvaraeu | Дата: Пятница, 28.01.2022, 22:35 | Сообщение # 8 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| А, всё нормально, это я ступил.
|
|
| |