- Код: Выделить всё
Dim a As Single
Dim b As Single
a = 1
b = 3
a = a / b
MsgBox a
MsgBox a = 0.3333333!
Какое точно значение записано в "a"?
Dim a As Single
Dim b As Single
a = 1
b = 3
a = a / b
MsgBox a
MsgBox a = 0.3333333!
Private Type tSingle
v As Single
End Type
Private Type tDump
b1 As Byte
b2 As Byte
b3 As Byte
b4 As Byte
End Type
Private Sub Form_Load()
Dim v1 As tSingle, v2 As tSingle
Dim d1 As tDump, d2 As tDump
v1.v = 1 / 3
v2.v = 0.3333333!
LSet d1 = v1
LSet d2 = v2
Debug.Print v1.v, v2.v, v1.v = v2.v
Debug.Print "0x" & Right$("00" & Hex$(d1.b1), 2) & Right$("00" & Hex$(d1.b2), 2) & Right$("00" & Hex$(d1.b3), 2) & Right$("00" & Hex$(d1.b4), 2), _
"0x" & Right$("00" & Hex$(d2.b1), 2) & Right$("00" & Hex$(d2.b2), 2) & Right$("00" & Hex$(d2.b3), 2) & Right$("00" & Hex$(d2.b4), 2)
End Sub
0.3333333 0.3333333 False
0xABAAAA3E 0xAAAAAA3E
MsgBox(a = 0.333333343!)
alibek писал(а):Кто же сравнивает на равенство числа с плавающей запятой?
Qwertiy писал(а):Я бы спросил, зачем вообще в Single считать
alibek писал(а): не ждал этого от тебя.
Кто же сравнивает на равенство числа с плавающей запятой?
Qwertiy писал(а):Дальше что?
Dim a As Single
Dim b As Single
a = 1
b = 3
a = a / b
MsgBox a = 0.3333333!
MsgBox a = 0.3333333!
Mikle писал(а):Согласитесь, это некрасиво, трудно было оставить ещё один символ в записи?
alibek писал(а):Дробь 1/3 не может быть представлена конечным числом ни в десятичном, ни в двоичном виде.
Mikle писал(а):простые дроби, имеющие в знаменателе не степень двойки, не могут быть точно представлены в двоичном float point формате
Mikle писал(а):Можно было добавить ещё одну значащую цифру, чтобы разным числам соответствовала разная запись, и чтобы преобразования bin->dec и dec->bin были однозначны (нет, не точны), не более того.
Mikle писал(а):Первый MsgBox даёт False, а второй True.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 79