Согласно этой разнице между Python float и numpy float32 , есть разница между тем, как python видит np.float32
и np.float64
.Если вы действительно проверите промежуточные значения value64
и value32
, вы увидите:
value32 = 0.5000000119209289
value64 = 0.5
, что объясняет, почему print(value32 <= threshold)
оценивается как ложное.Из-за двоичных ошибок я сомневаюсь, что округление до восьмого десятичного знака будет безопасным, так как с value32
у вас будет 0.50000001
.
Вы также должны учитывать, что время, необходимое для округления числа, крошечнои все еще должен использоваться в случае
np.float64(0.1) + np.float64(0.2)
, поскольку это оценивается как 0.30000000000000004
, и поэтому у вас могут возникнуть ошибки при использовании >=
или <=
.Эта ошибка также возникает, если вы используете библиотеку decimal
.Короче говоря, есть некоторые цифры, от которых невозможно избежать какой-либо ошибки.Единственный известный мне способ обойти это - округлить.
Я пытался протестировать несколько комбинаций с округлением и без него, и это было так быстро, что я не смог записать разницу во времени за 10000 итераций,так что если вы не торгуете акциями или не обучаете нейронную сеть в течение нескольких недель, я не думаю, что округление числа - это то, о чем вам следует беспокоиться.
Если вы беспокоитесь о произвольной природе того, куда округлятьчисло до, я бы искал строку длиной 0
больше 4 после значащей цифры, а затем обрезал ее там.