# Complex numbers
Source: https://speakeasy.com/docs/sdks/customize/data-model/complex-numbers

OpenAPI does not provide support natively for complex numbers. The highest precision integer type is an `integer` with an `int64` format, while the highest precision decimal value in the spec is a type `number` with a `double` format.

To support arbitrary precision numbers, Speakeasy introduces two new formats for use in OpenAPI documents: `bigint`, which represents arbitrary precision integers, and `decimal`, which represents arbitrary precision decimal numbers. When these formats are used, the generated SDK will use the language-appropriate types to allow natively interacting with them.

## Preserve precision when serializing

Generated SDKs treat `bigint` and `decimal` values as arbitrary precision and ensure their precision is maintained.

During serialization, however, the value will be cast into the `type` of the field, which may result in a loss of precision. To prevent this, avoid using a numeric `type` in the OpenAPI document, and rather use the `string` type with a `bigint` or `decimal` format. This ensures that the value is serialized as a string, preserving its full precision, subject to the typical limitations of arbitrary precision decimal values in the language of choice.