Однако математические операции в Python могут не дать того же результата, что и в C. , например 4294967295 + 1 = 0 в C для целых чисел без знака, но не для простых операций с целыми числами Python. Поэтому мне не следует использовать целые числа Python в своем проекте.
Могу ли я безопасно и легко использовать Numpy для воспроизведения поведения C? То есть, если я выполняю обычные операции (+, -, *, /, %, приведение числа с плавающей запятой к int или наоборот) над массивами типов np.uint32 или np.float64 для Например, гарантированно ли мне (или могу ли я каким-то образом получить эту гарантию) получить тот же результат, что и программа на C с uint32_t и float64_t ?
Я интересует только то, что является частью «официального поведения» C, все, что может зависеть от компилятора или процессора в C, также может отличаться от numpy, как если бы это был другой компилятор/процессор. Я спрашиваю, в частности, потому что у numpy есть Nan, который не всегда есть в C.
EDIT после комментариев:
Я рассматриваю более конкретно этот набор операций: (+, -, *, /, %, приведение числа с плавающей запятой к типу int или наоборот).
У меня есть безуспешно пытался просмотреть документацию numpy и сам провел несколько тестов:
TEST 1: переполнение int32 (
Код: Выделить всё
(uint32_t) 4294967295 + (uint32_t) 1 == 0
Похоже, что он не работает с числовыми скалярами
Код: Выделить всё
>>> import numpy
>>> a = numpy.uint32(4294967295)
>>> type(a)
>>> a += 1
>>> a
4294967296
>>> type(a)
Код: Выделить всё
import numpy
a = numpy.array([4294967295], dtype='uint32')
a += 1
print(a)
print(a.dtype)
Код: Выделить всё
[0]
uint32
**ТЕСТ 2: деление отрицательных целых чисел: **
Код: Выделить всё
-1/2 == 0
Но в «простом» numpy:
Код: Выделить всё
two = np.int64(2)
mone = np.int64(-1)
print(mone / two)
print(mone // two)
Код: Выделить всё
-0.5
-1
Подробнее здесь: https://stackoverflow.com/questions/781 ... operations