Как узнать размер поплавка в PHP? - PullRequest
0 голосов
/ 06 июня 2018

Я использую PHP 7.2.5 (установлен с использованием последней версии XAMPP) на моем компьютере, работающем в Windows 10 Home Single Language 64-разрядная операционная система .

Насколько мне известно, в PHP размеры целого числа и числа с плавающей запятой зависят от платформы.

PHP предоставил предопределенную константу PHP_INT_SIZE для определения размера целого числа, но не предоставил никакой такой константы для определения размера с плавающей точкой.

Итак, мой вопросКак мне узнать размер поплавка в PHP?

PS: я уже упоминал ранее заданный вопрос , но не смог получить надежное, эффективное и удовлетворительное решение для моегопроблема.В конце ответа на этот вопрос автор ответа делает следующее предположение

Я полагаю, «зависящий от платформы» означает, что он использует 4 байта на 32-битных платформах (традиционный размер дляfloat) и 8 байт на 64-битных и более крупных платформах (традиционный double).

, что, по-моему, является неопределенным, поскольку у него больше нет связанных свидетельств или доказательств.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Он почти наверняка будет использовать 64-битный формат IEEE, поскольку именно это в настоящее время использует каждая платформа.Вы можете добавить утверждение на этот счет, например,

assert((1.0+pow(2.0,-52))-1 != 0)
assert((1.0+pow(2.0,-53))-1 == 0)

проверит, что формат имеет ровно 53 значащих бита.

0 голосов
/ 06 июня 2018

Размер числа с плавающей точкой зависит от платформы, но, начиная с PHP 7.2, там на самом деле равно константе PHP_FLOAT_MAX.

Поскольку это зависит от платформы, нет однозначного ответа.Но вы можете по крайней мере увидеть, каков максимальный размер вашей платформы с этой константой в PHP 7.2: https://3v4l.org/QpHOI

Чтобы подсчитать байты, мы должны преобразовать этот очень большой float в двоичный файл, а затем мы можем вручнуюсосчитайте байты, см. здесь: https://3v4l.org/ASZbs

Очевидно, 3v4l.org может обрабатывать некоторые довольно большие числа с плавающей запятой, до 128 байтов!

Кредиты анонимному пользователю в документах PHP, которые создал функцию для преобразования 32+ битовых чисел в двоичный код , который я явно скопировал и вставил.

...