import std.format : format;
new SoftPlus1().executeFunction(1E10f);
new SoftPlus2().executeFunction(1E10f);
new SoftPlus3().executeFunction(1E10f);
interface ActivationFunction1 {
float executeFunction(float value)
assert(result.isFinite, format!"Activation function returned %s for input %.12g."(result, value));
class SoftPlus1 : ActivationFunction1 {
override float executeFunction(float value) {
return log(1 + exp(value));
interface ActivationFunction2 {
float executeFunction(float value);
class SoftPlus2 : ActivationFunction2 {
override float executeFunction(float value)out (result) {
assert(result.isFinite, format!"Activation function returned %s for input %.12g."(result, value));
return log(1 + exp(value));
abstract class ActivationFunction3 {
float executeFunction(float value)
assert(result.isFinite, format!"Activation function returned %s for input %.12g."(result, value));
class SoftPlus3 : ActivationFunction3 {
override float executeFunction(float value) {
return log(1 + exp(value));