Autor Téma: Vynechanie delenia nuly pomocou CASE. Má to význam?  (Přečteno 280 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3081
  • Karma: 29
    • Verze Delphi: XE7 professional

So svojimi 10 záznamami to nezistím. Príklady:
Kód: [Vybrat]
CASE WHEN TABLE1.FIELD1 = 0 THEN 0
  ELSE TABLE1.FIELD1 / (TABLE2.FIELD1 * TABLE2.FIELD2)

Kód: [Vybrat]
CASE WHEN TABLE1.FIELD1 = 0 THEN 0
  ELSE TABLE1.FIELD1 / SUM(TABLE2.FIELD1 * TABLE2.FIELD2)
Neviem ako je riešené delenie. Či sa testuje čitateľ na hodnotu 0. Ak nie, tak predpokladám, že delenie má väčšiu réžiu než CASE.
V druhom prípade som presvedčený, že stojí za to použiť CASE.
« Poslední změna: 17-11-2017, 08:45:06 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Guru
  • *****
  • Příspěvků: 545
  • Karma: 25
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #1 kdy: 17-11-2017, 08:26:22 »

So svojimi 10 záznamami to nezistím. Príklady:
Kód: [Vybrat]
CASE WHEN TABLE1.FIELD1 = 0 THEN 0
  ELSE TABLE1.FIELD1 / (TABLE2.FIELD1 * TABLE2.FIELD2)

Kód: [Vybrat]
CASE WHEN TABLE1.FIELD1 = 0 THEN 0
  ELSE TABLE1.FIELD1 / SUM(TABLE2.FIELD1 * TABLE2.FIELD2)
Neviem ako je riešené delenie. Či sa testuje čitateľ na hodnotu 0. Ak nie, tak predpokladám, že delenie má väčšiu réžiu než CASE.
V druhom prípade som presvedčený, že stojí za to použiť CASE.

Tomu nerozumim :-[

Deleni ma v cestine cleny delenec / delitel. Nasobeni cinitel * cinitel. Pises o citateli. Navic ta sumace v druhem pripade nedava smysl (chybi scitanec).

Tusil bych ze se muzes ptat na to, zda mohou byt vyrazy pro THEN a ELSE evaluovane oba zaroven pro jeden CASE. Ale to fakt jenom tipuju :)
« Poslední změna: 17-11-2017, 08:31:35 od Delfin »
Shiny disco balls! I don't like :)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3081
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #2 kdy: 17-11-2017, 08:49:27 »
My máme čitateľ / menovateľ.
Citace
Tusil bych ze se muzes ptat na to, zda mohou byt vyrazy pro THEN a ELSE evaluovane oba zaroven pro jeden CASE.
Nie. Ide mi len o to, či tou konštrukciou a tým pádom vynechaním delenia nuly niečo ušetrím.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1962
  • Karma: 101
    • Verze Delphi: D2007, XE3, DX10
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #3 kdy: 17-11-2017, 09:03:57 »
My máme čitateľ / menovateľ.
Pri pojmenovani zlomku. Ale pri pojmenovani operandu u operace deleni snad ne...

Online Delfin

  • Guru
  • *****
  • Příspěvků: 545
  • Karma: 25
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #4 kdy: 17-11-2017, 09:04:10 »
My máme čitateľ / menovateľ.
Citace
Tusil bych ze se muzes ptat na to, zda mohou byt vyrazy pro THEN a ELSE evaluovane oba zaroven pro jeden CASE.
Nie. Ide mi len o to, či tou konštrukciou a tým pádom vynechaním delenia nuly niečo ušetrím.

Jo taaak :) Ano, pri TABLE1.FIELD1=0 usetris. Evaluaci delitele a operaci deleni. Presneji, mel bys usetrit, protoze nevim jak ma Firebird uvnitr implementovany evaluator vyrazu (ale musel by byt dost mizerne napsany aby tomu tak nebylo). Obecne by mel byt vzdy efektivnejsi test na rovnost konstantni hodnoty nez deleni s evaluaci vyrazu v deliteli.
« Poslední změna: 17-11-2017, 09:23:30 od Delfin »
Shiny disco balls! I don't like :)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3081
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #5 kdy: 17-11-2017, 09:26:22 »
To pdf1957
Citace
Pri pojmenovani zlomku. Ale pri pojmenovani operandu u operace deleni snad ne...
Máš pravdu. Je to ako u vás.
To Delfin: Ďakujem. Asi si upravím SQL texty.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 317
  • Karma: 21
    • Verze Delphi: 10.2
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #6 kdy: 17-11-2017, 11:19:01 »
My máme čitateľ / menovateľ.
Citace
Tusil bych ze se muzes ptat na to, zda mohou byt vyrazy pro THEN a ELSE evaluovane oba zaroven pro jeden CASE.
Nie. Ide mi len o to, či tou konštrukciou a tým pádom vynechaním delenia nuly niečo ušetrím.

Řekl bych, že dopad na výkon bude naprosto mizivý, nebude-li to naopak pomalejší, zato přehlednost utrpí. Nula v čitateli ničemu nevadí, spíš aby nebyla ve jmenovateli toho zlomku.

Online Delfin

  • Guru
  • *****
  • Příspěvků: 545
  • Karma: 25
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #7 kdy: 17-11-2017, 12:12:14 »
Řekl bych, že dopad na výkon bude naprosto mizivý, nebude-li to naopak pomalejší, zato přehlednost utrpí. Nula v čitateli ničemu nevadí, spíš aby nebyla ve jmenovateli toho zlomku.

Ten CASE bude samozrejme "pomalejsi" nez primy zapis napr. pokud budou vsechny hodnoty ruzne od 0.

Ted me ale napada, ze jsem predtim napsal blbost :-[ On totiz evaluator muze pri nalezeni operace deleni skoncit pri nalezeni delence rovneho 0. Nemusi nutne pokracovat. V takovem pripade bys neusetril. Otazkou ted zustava, jak "chytry" je evaluator ve Firebirdu...
Shiny disco balls! I don't like :)

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 317
  • Karma: 21
    • Verze Delphi: 10.2
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #8 kdy: 17-11-2017, 12:14:35 »
Excellent
Rated 1 time
Ted me ale napada, ze jsem predtim napsal blbost :-[ On totiz evaluator muze pri nalezeni operace deleni skoncit pri nalezeni delence rovneho 0. Nemusi nutne pokracovat. V takovem pripade bys neusetril. Otazkou ted zustava, jak "chytry" je evaluator ve Firebirdu...

Správně by ani s dělencem = 0 předčasně skončit neměl, protože předem mj. neví, jestli konečný výraz bude třeba 0 / 10 = 0, nebo 0 / 0 = chyba.

Online Delfin

  • Guru
  • *****
  • Příspěvků: 545
  • Karma: 25
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Vynechanie delenia nuly pomocou CASE. Má to význam?
« Odpověď #9 kdy: 17-11-2017, 12:23:18 »
Ted me ale napada, ze jsem predtim napsal blbost :-[ On totiz evaluator muze pri nalezeni operace deleni skoncit pri nalezeni delence rovneho 0. Nemusi nutne pokracovat. V takovem pripade bys neusetril. Otazkou ted zustava, jak "chytry" je evaluator ve Firebirdu...

Správně by ani s dělencem = 0 předčasně skončit neměl, protože předem mj. neví, jestli konečný výraz bude třeba 0 / 10 = 0, nebo 0 / 0 = chyba.

A jo, deleni nulou. Mas pravdu. Diky! Odvolavam co jsem odvolal :-X :)
Shiny disco balls! I don't like :)

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: