|
Posted by Matthew on 01/14/08 19:05
Umberto Salsi emailed this:
> Matthew <matthew@spamkiller.com> wrote:
>
>> Hi,
>>
>> I want to change the precision level of floating point variables and
>> calculations which is done in php.ini.
>>
>> However the server I rent for my domain does not give me access to
>> php.ini, they say 'for security reasons'.
>>
>> Can the precision level be changed by PHP code as needed?
>>
>> Thanks and regards, etc..
>
> You can set this parameters at run-time. 16 digits is usually the maximum
> value on most platforms, larger values giving only meaningless or "fictional"
> digits:
>
> ini_set("precision", "16");
>
> This parameter only set the number of significant digits used by default
> when a binary "float" value gets formatted as a "string", not the internal
> precision at which calculations are performed (usually 53 bits). Example:
>
> ini_set("precision", "16");
> echo 1.0/3.0, "\n"; # => 0.3333333333333333
>
> ini_set("precision", "50");
> echo 1.0/3.0, "\n"; # => 0.33333333333333331482961625624739099293947219848633
>
> Note that "precision" is involved when:
>
> - a float value gets displayed with echo $f and print $f
>
> - performing an explicit type-cast (string) $f
>
> - on values embedded in literal strings: echo "Average value is $f";
>
> - passing a float to any function expecting a string, so for example
> strlen($f) may give differen results also with the same number
> depending on the "precision" parameter
>
> - serializing variables/arrays/objects containing floating point numbers,
> possibly with loss of precision, so in general $f != unserialize(
> serialize( $f ) ); this loss of precision may affect also WEB sessions,
> since $_SESSION[] gets automatically serialized at the end of the script
> (NOTE: as of PHP 4.3.2 another parameter "serialize_precision" was
> introduced, specific for serialized data)
>
> If you need a reliable way to handle high precision numbers, extensions
> like BCMATH and libraries as BigFloat are available.
Thanks Umberto. I don't need to display beyond 16 decimal places so that
will do. I thought I could increase the level of precision of the
calculations but I guess not.
Neither BCMath nor BigFloat seem to have trig functions which I'd need if
using them, so I'll just stick to what I have.
Thanks again.
Navigation:
[Reply to this message]
|