powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Задачка
25 сообщений из 77, страница 1 из 4
Задачка
    #40058504
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub zadachka()
Dim x As Double, x1 As Double, x2 As Double
Let x = Sqr(2#)

Let x1 = Val(CStr(x))
If x <> x1 Then MsgBox "Elementary, Watson!"

Let x2 = Val(CStr(x - x1))
If x <> x1 + x2 Then MsgBox "What about this?"
End Sub
...
Рейтинг: 0 / 0
Задачка
    #40058511
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
The Val function recognizes only the period ( . ) as a valid decimal separator.
...
Рейтинг: 0 / 0
Задачка
    #40058522
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot, а у вас в настройках Винды указана запятая в качестве десятичного? Бывает...
...
Рейтинг: 0 / 0
Задачка
    #40058539
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
HandKot, а у вас в настройках Винды указана запятая в качестве десятичного? Бывает...

не мой выбор, политика партии :-)
...
Рейтинг: 0 / 0
Задачка
    #40058552
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot, ну, вам придётся вставить Replace(....., ",", "."), если вы хотите добраться до конца задачки...
...
Рейтинг: 0 / 0
Задачка
    #40058556
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
HandKot, ну, вам придётся вставить Replace(....., ",", "."), если вы хотите добраться до конца задачки...
или использовать CDbl - оно вроде как будет использовать системный разделитель
...
Рейтинг: 0 / 0
Задачка
    #40058557
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вопрос-то вообще в чем?
Числа с плавающей запятой не сравнивают с помощью "=" и "<>" - в этом проблема? Ну так кури, как устроен Double
...
Рейтинг: 0 / 0
Задачка
    #40058563
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Числа с плавающей запятой не сравнивают с помощью "=" и "<>"
-- это утверждение мне кажется ложным.

Результаты вычислений (над числами с плавающей запятой) редко когда имеет смысл сравнивать с помощью "=" и "<>"

-- с этим соглашусь.
...
Рейтинг: 0 / 0
Задачка
    #40058564
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
А вопрос-то вообще в чем?
Числа с плавающей запятой не сравнивают с помощью "=" и "<>" - в этом проблема? Ну так кури, как устроен Double


Он просто не понимает элементарных вещей в программировании. Это не первый подобный его топик.
...
Рейтинг: 0 / 0
Задачка
    #40058569
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
HandKot, а у вас в настройках Винды указана запятая в качестве десятичного? Бывает...

зная, что "бывает", из какого места надо доставать мозг, чтобы использовать несовместимые по языковым соглашениям преобразования?

Топик-то о чем, болезный?
О том, что после двойного преобразования число становится другим ?
Можно показать, где обещано иное?

И это, в части сравнений значений double - вообще говоря, даже исходный x сам с собой
на равенство/неравенство не вполне корректно сравнивать...
...
Рейтинг: 0 / 0
Задачка
    #40058570
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Shocker.Pro
Числа с плавающей запятой не сравнивают с помощью "=" и "<>"
-- это утверждение мне кажется ложным.

Результаты вычислений (над числами с плавающей запятой) редко когда имеет смысл сравнивать с помощью "=" и "<>"

-- с этим соглашусь.


Вместо того чтобы создавать очередной бессмысленный топик, иногда лучше сначала заглянуть в гугл
...
Рейтинг: 0 / 0
Задачка
    #40058572
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
в части сравнений значений double - вообще говоря, даже исходный x сам с собой
на равенство/неравенство не вполне корректно сравнивать...
да что вы говорите, глубокоуважаемый! Ну, не сравнивайте, если "не вполне корректно" -- вдруг он в самом деле окажется себе не равен!
...
Рейтинг: 0 / 0
Задачка
    #40058581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Abs(x1-x2) < точность

это сравнение для Double. Тут не с чем спорить
...
Рейтинг: 0 / 0
Задачка
    #40058584
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, если вам нужно проверить, не изменялось ли значение переменной по ходу работы программы, то вы напишите
Код: vbnet
1.
Abs(x1-x2) < точность

?
...
Рейтинг: 0 / 0
Задачка
    #40058589
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Shocker.Pro, если вам нужно проверить, не изменялось ли значение переменной по ходу работы программы, то вы напишите
Да, потому что у метода проверки есть единственная ответственность - сверить два значения. Изменялась она или получена посредством вычисления, для метода это совершенно неважно. Кури SOLID и прочие практики программирования. Ты, видимо, не работал в команде с большим количеством разработчиков, работающих над одним кодом. Твой вариант хрупок, его легко сломать при рефакторинге и масштабировании.
...
Рейтинг: 0 / 0
Задачка
    #40058592
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

если переменную "никто не трогал", то её значение точно будет равно исходному будь она String, Long или Double.

Если вы скажете, что вы свой код пишете так, что вам принципиально никогда не может понадобиться это свойство переменных ... я пойму.
...
Рейтинг: 0 / 0
Задачка
    #40058597
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
если переменную "никто не трогал"
переменную "никто не трогать" обычно может только в пределах метода. Еще раз, если сейчас у тебя проверка и изменение переменной идет в одном методе, то это абсолютно не значит, что после рефакторинга приложени это не окажется в разных методах. И твой коллега не должен думать о том, что он может сломать код, если просто вынесет часть его в другой метод.

Я тебе говорю, как делать правильно, а ты дальше можешь руководствоваться любыми внутренними убеждениями и верованиями.
...
Рейтинг: 0 / 0
Задачка
    #40058599
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

то есть -- забыли про Double -- вообще никогда никакие переменные не следует проверять на "никто не трогал"?
...
Рейтинг: 0 / 0
Задачка
    #40058603
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
в части сравнений значений double - вообще говоря, даже исходный x сам с собой
на равенство/неравенство не вполне корректно сравнивать...
да что вы говорите, глубокоуважаемый! Ну, не сравнивайте, если "не вполне корректно" -- вдруг он в самом деле окажется себе не равен!

я и не сравниваю. Но и вопросов не задаю.
Вот вопрос к вам.
Вы пишите:
Код: vbnet
1.
2.
3.
4.
Dim x As Double, x1 As Double, x2 As Double
Let x = Sqr(2#)

Let x1 = Val(CStr(x))


на каком основании вы ожидаете в x1 то же самое двоичное представление значения, полученного другим вычислением?

Чтобы было понятно, о чем идет речь - в общем случае, не осторожно этого ожидать даже при использовании одного и того же способа вычисления:
Код: vbnet
1.
2.
3.
Dim x As Double, x1 As Double, x2 As Double
Let x = Sqr(2#)
Let x1 = Sqr(2#)




Иван FXSесли переменную "никто не трогал", то её значение точно будет равно исходному будь она String, Long или Double.
Понятие сравнения на равенство хорошо определено только для типов данных, для которых возможно точное представление значения.
К double это не относится, поэтому на равенство их сравнивать не рекомендуется ( как и на прямое неравенство).
Хотя соответствующие операции формально и определены.
...
Рейтинг: 0 / 0
Задачка
    #40058604
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Shocker.Pro,

то есть -- забыли про Double -- вообще никогда никакие переменные не следует проверять на "никто не трогал"?
Не забыли про Double, потому что в топике речь идет про плавающую запятую.
Целые числа можно сравнивать с предсказуемым результатом.

А про трогал-не трогал - это вообще бредовая постановка задачи. Для подобных кейсов существуют флаги, property для классов и т.п.. А сверка значения переменной с исходным значением никак не даст мне знаний о том, трогал ли ее кто-нибудь или нет.
...
Рейтинг: 0 / 0
Задачка
    #40058610
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Код: vbnet
1.
2.
3.
Dim x As Double, x1 As Double, x2 As Double
Let x = Sqr(2#)
Let x1 = Sqr(2#)

правильно ли я вас понял, что вы не уверены даже в том, как отработает код
Код: vbnet
1.
if 2# = 2# then Stop


?
...
Рейтинг: 0 / 0
Задачка
    #40058612
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, уверенным быть нельзя. Для потребителя лишь известно, что некая функция возвращает определенный результат с определенной точностью. Так как результатом является число с плавающей запятой, к этому результату не стоит применять сравнение на эквивалентность.
...
Рейтинг: 0 / 0
Задачка
    #40058613
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
если сейчас у тебя проверка и изменение переменной идет в одном методе, то это абсолютно не значит, что после рефакторинга приложени это не окажется в разных методах. И твой коллега не должен думать о том, что он может сломать код, если просто вынесет часть его в другой метод.
я просто это уже распечатал и на стенку повесил, чтобы выучить наизусть ... но потом осознал, что я ведь забуду довольно быстро, что этот пассаж -- из топика о Double...
...
Рейтинг: 0 / 0
Задачка
    #40058615
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby

Код: vbnet
1.
2.
3.
Dim x As Double, x1 As Double, x2 As Double
Let x = Sqr(2#)
Let x1 = Sqr(2#)

правильно ли я вас понял, что вы не уверены даже в том, как отработает код
Код: vbnet
1.
if 2# = 2# then Stop


?

Нет. неправильно.
Правильно, на будущее, так - если вас заинтересовал этот вопрос применительно к double, значит вы что-то делаете неправильно.

вспомнил, кстати - есть в некоторых странах люди, которые счетчики времени в ракетах пво строят на double (ЗРК Patriot первого покления).
Это оказалось очень удобным.
Выяснилось, что спустя примерно 3 месяца боевого дежурства ракета летит на 180 градусов,
ровно в обратную сторону от намеченной.
Чтобы не переписывать софт, ввели регламент обнуления счетчика времени.
...
Рейтинг: 0 / 0
Задачка
    #40058693
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем, собственно, работа кода
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Example_double(x As Double)
Dim x_saved As Double
Let x_saved = x
Call some_proc_double(x)
If x <> x_saved Then MsgBox "x was changed"
End Sub

Sub some_proc_double(x As Double)
Let x = x + dxxx
End Sub

-- отличается от работы кода
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Example_long(i As Long)
Dim i_saved As Long
Let i_saved = i
Call some_proc_long(i)
If i <> i_saved Then MsgBox "i was changed"
End Sub

Sub some_proc_long(i As Long)
Let i = i + diii
End Sub

?

Тем, что i обязательно поменяется в some_proc_long(), если diii<>0, а x может не поменяться в some_proc_double() -- не смотря на то, что dxxx<>0 ?
...
Рейтинг: 0 / 0
25 сообщений из 77, страница 1 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Задачка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]